图片转Base64换行的问题
程序员文章站
2022-04-28 21:28:10
...
接上一篇 Android识别手写笔迹并透明化处理
由于我们的服务端接口是通过base64接收处理后的图片,因此需要将图片处理成Base64字符串(忽略将图片从文件转化为Bitmap的过程)
/**
* bitmap转为base64
* @param bitmap
* @return
*/
public static String bitmapToBase64(Bitmap bitmap) {
String result = null;
ByteArrayOutputStream baos = null;
try {
if (bitmap != null) {
baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
baos.flush();
baos.close();
byte[] bitmapBytes = baos.toByteArray();
result = Base64.encodeToString(bitmapBytes, Base64.DEFAULT);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (baos != null) {
baos.flush();
baos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return result;
}
产生问题
base64的字符串中每76个字符后面会被添加上一个\n
符号
产生原因
我们采用的是Base64.DEFAULT
的flags进行转码,会造成字符串中有很多\n
分隔符,原因是由于RFC2045规范每行字符串不能超过76个字符,因此Base64在编码的时候会添加\n
分隔符,此规范链接RFC2045规范
此问题会导致我们给服务端提交base64的时候,该图片在web上无法通过 src='data:image/jpeg;base64,...'
正常展示图片
解决方法
将flags设置为Base64.NO_WRAP
,在Android的文档中有说明,设置为这个flag,则返回的字符串将会一个长串(也就是不会换行),这正是我们期望的结果
// NO_WRAP
// Encoder flag bit to omit all line terminators (i.e., the output will be on one long line).
result = Base64.encodeToString(bitmapBytes, Base64.NO_WRAP);
推荐阅读
-
IE8下jQuery改变png图片透明度时出现的黑边问题_html/css_WEB-ITnose
-
js 显示base64编码的二进制流网页图片_javascript技巧
-
图片低分辨率转高分辨率的方法
-
浅析php fwrite写入txt文件的时候用 rn不能换行的问题
-
Ajax异步提交数据返回值的换行问题实例分析
-
用readfile函数读取图片时碰到的有关问题
-
解决浏览器显示长数字不能自动换行或长字母不能换行的问题_html/css_WEB-ITnose
-
Java实现base64图片编码数据转换为本地图片的方法
-
解决iOS11图片下拉放大出现信号栏白条的bug问题
-
浅谈图片上传利用request.getInputStream()获取文件流时遇到的问题