1.问题描述

小程序项目需要后端接口提供base64流的图片,对于H5的语法,前面拼接后面的代码即可: data:image/png;base64,

先看后台代码:

@RestController
@RequestMapping("/file")
public class FileController { /**
* 图片转为base64流
*/
@GetMapping("/imgToBase64")
public JSONObject imgToBase64() {
JSONObject jsonObject = new JSONObject();
try {
//读取文件
InputStream in = new BufferedInputStream(new FileInputStream("C:\\Users\\zhongyushi\\Downloads\\3.jpg"));
byte[] srcBytes = new byte[in.available()];
in.read(srcBytes);
//把字节流转为base64字符流
String encode = new BASE64Encoder().encode(srcBytes);
jsonObject.put("data", encode);
} catch (Exception e) {
e.printStackTrace();
}
return jsonObject;
} /**
* 图片转为字节流
*/
@GetMapping("/imgToByte")
public JSONObject imgToByte() {
JSONObject jsonObject = new JSONObject();
try {
//读取文件
InputStream in = new BufferedInputStream(new FileInputStream("C:\\Users\\zhongyushi\\Downloads\\3.jpg"));
byte[] srcBytes = new byte[in.available()];
in.read(srcBytes);
jsonObject.put("data", srcBytes);
} catch (Exception e) {
e.printStackTrace();
}
return jsonObject;
}
}

以vue的代码为例说明:

<template>
<img :src="data:imageUrl">
</template>
<script>
export default {
name: '',
created() {
this.getImage()
},
data() {
return {
imageUrl: ''
}
},
methods: {
getImage() {
axios.get('http://localhost:8081/file/imgToBase64').then(res => {
this.imageUrl = 'data:image/png;base64,' + res.data.data
}, err => {
console.log(err)
})
}
},
}
</script>
<style scoped>
</style>

但对于微信小程序却不行,原因是在返回的字符串中,包含了换行符‘\n’,H5可以自动解析并去除,微信小程序却没有这么智能。

2.解决方案

在微信小程序中需要在获取到数据后把换行符替换。

WXML代码:

<view>
<image src="{{imgUrl}}" style="width:100px;height:44px;"></image>
</view>

JAVASCRIPT代码:

Page({
data: {
imgUrl: ''
},
onLoad() {
this.getImg()
},
getImg() {
let that = this
wx.request({
method: 'GET',
url: 'http://localhost:8081/file/imgToBase64',
success(res) {
let data = res.data.data
data = data.replace(/[\r\n]/g, "")
that.setData({
imgUrl: 'data:image/png;base64,' +data
})
}
})
}
})

3.扩展说明

仔细观察会发现,我是后台代码有两种方法,另外一种是直接返回字节流而不是base64流,那么这种方式就不会存在上述的问题,我以另一种组件说明。

JSON代码:

{
"usingComponents": {
"mp-uploader": "weui-miniprogram/uploader/uploader"
}
}

WXML代码:

<view>
<mp-uploader files="{{files}}" max-count="5" title="图片上传" tips="图片上传提示"></mp-uploader>
</view>

JAVASCRIPT代码:

Page({
data: {
files: [],
},
onLoad() {
this.getImg()
},
getImg() {
let that = this
wx.request({
method: 'GET',
url: 'http://localhost:8081/file/imgToBase64',
success(res) {
let arr = []
arr.push({
url: 'data:image/png;base64,' + res.data.data
})
that.setData({
files: arr
})
}
})
}
})

上述使用的是weui的扩展组件:图片上传的组件,使用的是字节流的方式获取图片并显示。

base64图片显示问题的更多相关文章

  1. html img Src base64 图片显示

    http://blog.csdn.net/knxw0001/article/details/10983605 大家可能注意到了,网页上有些图片的src或css背景图片的url后面跟了一大串字符,比如: ...

  2. #ZgotmplZ go web 开发 base64 图片显示

    Go Web开发,用Base64作为图片URL时遇到#ZgotmplZ的问题 - 简书 https://www.jianshu.com/p/54fc25da7c4f // var imgBase64 ...

  3. MVC显示Base64图片

    本篇演示ASP.NET MVC应用程序,显示Base64图片. Insus.NET浏览网页,发现一个站点http://www.base64-image.de/ 想起以前也有实现过<如何把数据流转 ...

  4. flutter 显示base64 图片

    后台返回base64 为了本地显示需要转换成Uint8List 1.导入包 import 'dart:convert';2.后台返回base64 格式不被识别需要切分 //'"data:im ...

  5. img src 使用 base64 图片数据

    img src 使用 base64 图片数据 在网页上显示一张图片通常是 <img src="xxx.png" > 或 <img src="www.ur ...

  6. Base64 图片转换工具

    以前在写asp的后台的时候,有一个上传功能是必须的,那时候进行的图片预览(未上传前)其实就是获取本地的图片路径来显示图片,但是随着HTML5的出现,可以把图片通过编码来实现预览. 在雅虎的36条速度优 ...

  7. base64图片在各种浏览器的兼容性处理

    IE浏览器目前最高的版本是v11,而微软放弃了IE,转向新的浏览器开发,并取名为Edge.base64图片在IE9及以后的图片均能显示没有问题,而Firefox, Chrome, Safari等非IE ...

  8. 利用cropper插件裁剪本地图片,然后将裁剪过后的base64图片上传至七牛云空间

    现在做的项目需要做一些图片处理,由于时间赶急,之前我便没有处理图片,直接将图片放在input[type=file]里面,以文件的形式提交给后台,这样做简直就是最低级的做法,之后各种问题便出来了,人物头 ...

  9. chrome 隐藏技能之 base64 图片转换

    有时候我们要转换图片为base64,或者将base64转回图片,可能都需要找一些在线工具或者软件类型的工具才行.当然 chrome 也算是软件,但是好在做前端的都有 chrome.好了,来看下简单的例 ...

随机推荐

  1. 从微信小程序到鸿蒙js开发【04】——list组件

    目录: 1.可滚动区域 2.list + list-item 3.list + list-item-group + list-item 1.可滚动区域 在许多场景中,页面会有一块区域是可滚动的,比如这 ...

  2. codeblocks输出中文乱码解决办法

    在使用codeblocks进行编程的时候我发现控制台输出会出现中文乱码,就像这样: 所以很快我就问了老师,解决步骤如下: 一:如果源码是用codeblock编写的,打开Setting->Edit ...

  3. 最大子阵 DP or 前缀和orb暴力 能过

    在一个给定的n*m二维矩阵中求一个子矩阵元素和的最大值. 思路: 1:一个二维矩阵由两个点可以确定,枚举两个点,取子矩阵最大值. 2:在一维矩阵中,求一个序列的最大子段,利用 f[i]=max(f[i ...

  4. Educational Codeforces Round 91 (Rated for Div. 2) C. Create The Teams

    题目链接:https://codeforces.com/contest/1380/problem/C 题意 给 $n$ 个数分组,要求每组的最小值乘以该组数的个数不小于 $x$ . 题解 从大到小依次 ...

  5. 【洛谷 p3381】模板-最小费用最大流(图论)

    题目:给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用. 解法:在Dinic的基础下做spfa算法. 1 #include<cst ...

  6. 2019牛客多校 Round7

    Solved:5 Rank:296 E Find the median (线段树) 题意:最开始一个空的数组 4e5次操作 每次把Li,Ri中的每个数插入进来 问当前的中位数 题解:把这n个区间离散化 ...

  7. hdu4217 Data Structure?

    Problem Description Data structure is one of the basic skills for Computer Science students, which i ...

  8. 2017, X Samara Regional Intercollegiate Programming Contest M. Last Man Standing (贪心,双指针)

    题意:有\(n\)个吃鸡玩家,在某个时间段给你他们每个人的杀敌数,判断数据是否合法,并输出每个人对应的杀敌情况. 题解:刚开始写的是直接暴力枚举,向后去找并且标记,然后存到vector最后输出,结果一 ...

  9. Redis 管理命令

    INFO 命令 # 查看redis相关信息 127.0.0.1:6379> info # 服务端信息 # Server # 版本号 redis_version:3.2.12 # redis版本控 ...

  10. Win7下安装IIS

    安装IIS 1.控制面板 --> 程序 --> 卸载程序,进入"程序与功能". 2.进入"打开或关闭Window功能". 3.找到"Int ...