本帖最后由 大山哥哥 于 2016-12-28 10:48 编辑
大家一听图片转base64,可能就会嘿嘿一笑,网上demo多的是,这玩意还用得着写么
但是这里要说明一个问题这里在设置base64的模式要选为no_wrap,不然在转换后,可能会出问题,尤其是在小米手机上
为什么会有问题呢?
Base64算法加密,当字符串过长(一般超过76)时会自动在中间加一个换行符,字符串最后也会加一个换行符。导致和其他模块对接时结果不一致。
首先说下base64存在哪些模式吧
- CRLF 这个参数看起来比较眼熟,它就是Win风格的换行符,意思就是使用CRLF这一对作为一行的结尾而不是Unix风格的LF
- DEFAULT 这个参数是默认,使用默认的方法来加密
- NO_PADDING 这个参数是略去加密字符串最后的”=”
- NO_WRAP 这个参数意思是略去所有的换行符(设置后CRLF就没用了)
- URL_SAFE 这个参数意思是加密时不使用对URL和文件名有特殊意义的字符来作为加密字符,具体就是以-和_取代+和/
好了上面都是所谓的言论,那么咱们接下来直接上代码吧~
[Java] 纯文本查看 复制代码 public static String imgToBase64( Bitmap bitmap,int quality) {
if(bitmap == null){
//bitmap not found!!
}
ByteArrayOutputStream out = null;
try {
out = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, quality, out);
out.flush();
out.close();
byte[] imgBytes = out.toByteArray();
return Base64.encodeToString(imgBytes, Base64.NO_WRAP);
} catch (Exception e) {
// TODO Auto-generated catch block
return null;
} finally {
try {
out.flush();
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
好了~,希望大家以后在做这类的操作的时候注意下,别忘了这里有解决方案哦
|