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. LaTeX 环境安装&编译器配置

    推荐网站:https://www.latexstudio.net/articles/ (基本所有的latex疑惑都可以在这里得到解决) 入门视频:两小时短小精悍,让你轻松入门,https://www. ...

  2. Educational Codeforces Round 84 (Div. 2)

    Educational Codeforces Round 84 (Div. 2) 读题读题读题+脑筋急转弯 = =. A. Sum of Odd Integers 奇奇为奇,奇偶为偶,所以n,k奇偶性 ...

  3. Checkout Assistant CodeForces - 19B

    题意: 给你n个物品,每个物品有一个价格ci和一个支付时间ti,在这个ti时间内,你可以免费拿ti个物品.问你想要带走这n个物品最小需要多少钱 题解: 原本还想着贪心去写,但是好像贪心写不了,,,不属 ...

  4. 牛客编程巅峰赛S1第5场 - 青铜&白银 B.完全平方数的尾巴 (暴力)

    题意:有一个数\(x\),判断其是否能有某个完全平方数$mod$1000得到. 题解:直接写个for判断一下就好了,因为对1000取模,所以枚举到1000即可. 代码: class Solution ...

  5. 卸载vue2.9.6版本,安装新版本

    1.检查vue安装目录(cmd中输入) where vue 2.删除目录中的关于vue的文件(可以将文件按时间排序,找到vue相关的文件删除) 3.检查vue是否还能找到 4.安装新版本的vue np ...

  6. Dapr是如何简化微服务的开发和部署

    基于微服务设计模式的现代应用程序面临着一系列挑战.微服务需要有一个强大的服务发现机制来实现动态连接.它们需要松散耦合,实现自主性和独立缩放.微服务需要支持多种语言,其中每个服务都是以最合适的语言.框架 ...

  7. C++中main函数的返回值一定要是int

    因为大学上课时候,经常是在主函数中做处理,直接用cout语句输出到显示设备,所以一直在用void main(). 直到后面具体编程的时候,才发现void main()这种用法是按 C89(C语言的早期 ...

  8. Gym 100796B Wet Boxes(思维)题解

    题意:给一个如图坐标系,每个方形都放在下面两个中间,已知一个木块湿了那么他下面所有的都会湿,显然,不能湿两次.问,每次给出一个坐标,把他弄湿,有几个木块从干变成湿了. 思路:我们把坐标系拉直,就变成了 ...

  9. μC/OS-III---I笔记11---就绪任务列表管理

    就绪优先级为映像响表 在UCOSIII内,任务调度是要先找到优先级最高的任务,然后执行.理论上对于UCOSIII可以有无数个优先级,每个优先级又可以有无数个任务但是对于这么多的任务如何快速查到到当先就 ...

  10. online QRcode generator , QRcode=== (Quick Response Code) , 二维条码,二维码,彩色二维码,图片二维码,

    online QRcode generator ,  QRcode=== (Quick Response Code)    , 二维条码,二维码,彩色二维码,图片二维码, 1 http://cli.i ...