A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 大山哥哥 于 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();
            }
        }
    }


好了~,希望大家以后在做这类的操作的时候注意下,别忘了这里有解决方案哦


4 个回复

倒序浏览

回帖奖励 +1

支持一个
回复 使用道具 举报
回复 使用道具 举报
感谢!!!!!!!
回复 使用道具 举报
多谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马