base64图片显示问题
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图片显示问题的更多相关文章
- html img Src base64 图片显示
http://blog.csdn.net/knxw0001/article/details/10983605 大家可能注意到了,网页上有些图片的src或css背景图片的url后面跟了一大串字符,比如: ...
- #ZgotmplZ go web 开发 base64 图片显示
Go Web开发,用Base64作为图片URL时遇到#ZgotmplZ的问题 - 简书 https://www.jianshu.com/p/54fc25da7c4f // var imgBase64 ...
- MVC显示Base64图片
本篇演示ASP.NET MVC应用程序,显示Base64图片. Insus.NET浏览网页,发现一个站点http://www.base64-image.de/ 想起以前也有实现过<如何把数据流转 ...
- flutter 显示base64 图片
后台返回base64 为了本地显示需要转换成Uint8List 1.导入包 import 'dart:convert';2.后台返回base64 格式不被识别需要切分 //'"data:im ...
- img src 使用 base64 图片数据
img src 使用 base64 图片数据 在网页上显示一张图片通常是 <img src="xxx.png" > 或 <img src="www.ur ...
- Base64 图片转换工具
以前在写asp的后台的时候,有一个上传功能是必须的,那时候进行的图片预览(未上传前)其实就是获取本地的图片路径来显示图片,但是随着HTML5的出现,可以把图片通过编码来实现预览. 在雅虎的36条速度优 ...
- base64图片在各种浏览器的兼容性处理
IE浏览器目前最高的版本是v11,而微软放弃了IE,转向新的浏览器开发,并取名为Edge.base64图片在IE9及以后的图片均能显示没有问题,而Firefox, Chrome, Safari等非IE ...
- 利用cropper插件裁剪本地图片,然后将裁剪过后的base64图片上传至七牛云空间
现在做的项目需要做一些图片处理,由于时间赶急,之前我便没有处理图片,直接将图片放在input[type=file]里面,以文件的形式提交给后台,这样做简直就是最低级的做法,之后各种问题便出来了,人物头 ...
- chrome 隐藏技能之 base64 图片转换
有时候我们要转换图片为base64,或者将base64转回图片,可能都需要找一些在线工具或者软件类型的工具才行.当然 chrome 也算是软件,但是好在做前端的都有 chrome.好了,来看下简单的例 ...
随机推荐
- 用werkzeug实现一个简单的python web框架
使用工具 Pycharm , Navicat , WebStorm等 使用库 Werkzeug用于实现框架的底层支撑,pymysql用于实现ORM,jinja2用于模板支持,json用于返回json数 ...
- Scala面向对象—类详解2(继承相关)
1.单例类 package com.zzzy class AAA {//单例 /*//java 思路--私有化构造方法,提供公开的getAAA 行不通 private def this(){ this ...
- M1 MacBook安装Homebrew
在装载M1芯片的MacBook产品上,默认是不带有homebrew这款包管理工具的,具体原因官方解释为适配问题,原有的homebrew无法与silicon Mac机型匹配.但是这并不意味着我们不可以在 ...
- axios增加自定义headers,页面上出现,服务端收不到
问题 axios增加自定义headers,页面上出现,服务端收不到 原因 vue-cli起的服务是用node-http-proxy中间件处理的 默认是只有几个常用的header,自定义header是直 ...
- 域渗透——获得域控服务器的NTDS.dit文件
0x00 前言 在之前的文章<导出当前域内所有用户hash的技术整理>曾介绍过通过Volume Shadow Copy实现对ntds.dit文件的复制, 可用来导出域内所有用户hash.本 ...
- UA 广告 All In One
UA 广告 All In One UA 广告是什么 广告投放 / 市场营销 互联网营销和分析专用名词速览 http://www.chinawebanalytics.cn/digital-marketi ...
- 使用 js 实现一个简易版的 GIPHY 动图搜索 web 应用程序
使用 js 实现一个简易版的 GIPHY 动图搜索 web 应用程序 具有挑战性的前端面试题 API JAMstack refs https://www.infoq.cn/article/0NUjpx ...
- 智能货柜 & 技术原理 (动态视觉识别 + 重力感应)
智能货柜 & 技术原理 (动态视觉识别 + 重力感应) 智能货柜 拥有智能化.精细化运营模式的智能货柜成为代替无人货架继前进的方式. 相比无人货架来说,智能货柜的技术门槛更高,拥有 RFID. ...
- convert number or string to ASCII in js
convert number or string to ASCII in js ASCII dictionary generator // const dict = `abcdefghijklmnop ...
- css & auto height & overflow: hidden;
css & auto height & overflow: hidden; {overflow: hidden; height: 100%;} is the panacea! {溢出: ...