将base64编码转成图片存到本地为什么都是损坏的?

qq920008529 2016-03-10 12:08:54

public static boolean saveBase64Pic(String imgStr,Integer imgStrLength,String picNewname,String keepFilePath){
//对字节数组字符串进行Base64解码并生成图片
imgStr=imgStr.replaceFirst("data:image/jpeg;base64,", "");
System.out.println("后来:"+imgStr);
if (imgStr == null) //图像数据为空
return false;
BASE64Decoder decoder = new BASE64Decoder();
try
{
//Base64解码
byte[] b = decoder.decodeBuffer(imgStr);
System.out.println("imgStrLength:"+imgStrLength+",解码后长度:"+b.length);
for(int i=0;i<b.length;++i)
{
if(b[i]<0)
{//调整异常数据
b[i]+=256;
}
}
//生成jpeg图片
String imgFilePath = keepFilePath+"\\"+picNewname;//新生成的图片
//String imgFilePath ="e://222.jpg";
System.out.println(imgFilePath);
OutputStream out = new FileOutputStream(imgFilePath);
out.write(b);
out.flush();
out.close();
return true;
}
catch (Exception e)
{
return false;
}
}
...全文
1746 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wcwtitxu 2018-03-27
  • 打赏
  • 举报
回复

System.out.println("前面:"+imgStr); // 前后确认下 有些图可能不是 jpg, 
imgStr=imgStr.replaceFirst("data:image/jpeg;base64,", "");
System.out.println("后来:"+imgStr);


// 这个操作没有必要
for(int i=0;i<b.length;++i)
{  
    if(b[i]<0)  
    {//调整异常数据  
        b[i]+=256;  
    }  
}

心随念 2018-03-26
  • 打赏
  • 举报
回复
引用 5 楼 Acxm7799 的回复:
//输出base64 数据,截取","之后的值进行转换 String str = text.substring(text.indexOf(",")+1); 因为base64图片的前缀是需要去掉的,网上的大多数没说这个问题。截取下数据就好了
楼主已经做了这个操作了:imgStr=imgStr.replaceFirst("data:image/jpeg;base64,", ""); 使用这个方法试试吧,亲测,没有问题:
 public static boolean generateImage(String base64Code, String path) {  
        if (null == base64Code) {  
            return false;  
        }  
          
        byte[] base64Byte = Base64.decodeBase64(base64Code);  
          
        try {  
            OutputStream out = new FileOutputStream(path);  
            out.write(base64Byte);  
            out.flush();  
            out.close();  
            return true;  
        } catch (Exception e) {  
            return false;  
        }  
          
    }  
其中Base64 是导入的这个包org.apache.commons.codec.binary.Base64 注意:也得吧前缀data:image/jpeg;base64,去掉
Acxm7799 2018-03-26
  • 打赏
  • 举报
回复
//输出base64 数据,截取","之后的值进行转换 String str = text.substring(text.indexOf(",")+1); 因为base64图片的前缀是需要去掉的,网上的大多数没说这个问题。截取下数据就好了
qq_37498323 2017-02-10
  • 打赏
  • 举报
回复
我也遇到这种情况,请问是怎么解决的?
家里敷泥呀 2016-03-10
  • 打赏
  • 举报
回复
什么数据经过Base64解码后还能生成图片?你的源数据怎么来的?
qq920008529 2016-03-10
  • 打赏
  • 举报
回复
怎么搞求大神求大神
qq920008529 2016-03-10
  • 打赏
  • 举报
回复
怎么搞求大神求大神

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧