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

-妖孽 2015-05-19 10:25:13
如题。

BASE64Decoder decoder = new BASE64Decoder();
//Base64解码
byte[] b = decoder.decodeBuffer(imgfnPhoto);
for (int i = 0; i < b.length; ++i) {
if (b[i] < 0) {// 调整异常数据
b[i] += 256;
}
}
//生成jpg图片
String filename = this.createGUIDService.getGUID()+".jpg";
OutputStream out = new FileOutputStream(request.getRealPath("fsweb/workData/web") + "//" + filename);
out.write(b);
out.flush();
out.close();

网上找的代码全是这段,但是我用了之后生成的图片全是损坏的,实在不明白是哪里出了问题。

求大牛解答

在线等。
...全文
21715 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_42132131 2019-05-09
  • 打赏
  • 举报
回复
你的base64字符串得去掉前面的头信息,图片信息是不会包含头信息的,这样图片就不会损坏了
tongyue123123 2019-04-29
  • 打赏
  • 举报
回复
那是因为你没有把base64编码的头去掉 去掉以后就可以了
DESC 2019-01-23
  • 打赏
  • 举报
回复
引用 10 楼 -妖孽 的回复:
来补个完整的结局吧。 就是因为没有把data:image/jpeg;base64,这个前缀给去掉纠结了我那么多天
正解
  • 打赏
  • 举报
回复
在转换之前把base64字符串开头的“data:image/jpeg;base64,”这一段去掉
baidu_37722694 2017-11-10
  • 打赏
  • 举报
回复
imgStr.substring(imgStr.indexOf(",")+1,imgStr.length())
angry_pawn 2017-09-05
  • 打赏
  • 举报
回复
引用 10 楼 jsynzzp 的回复:
来补个完整的结局吧。 就是因为没有把data:image/jpeg;base64,这个前缀给去掉纠结了我那么多天
你倒是说一下怎么去掉啊
qq_34488482 2017-06-12
  • 打赏
  • 举报
回复
楼主,我也遇到了这个问题请问如何解决
qq_36897184 2017-01-18
  • 打赏
  • 举报
回复
楼主 ,求你把data:image/jpeg;base64,这个前缀去掉的代码发下 ,谢谢
qq_36529211 2016-10-27
  • 打赏
  • 举报
回复
感谢楼主 ~这个问题困扰我一上午了~
王庆禹 2016-08-11
  • 打赏
  • 举报
回复
完美解决!郁闷了一上午的问题
u010759817 2016-05-02
  • 打赏
  • 举报
回复
引用 10 楼 jsynzzp 的回复:
来补个完整的结局吧。 就是因为没有把data:image/jpeg;base64,这个前缀给去掉纠结了我那么多天
太感谢了,找了半天原来如此啊...
olveJ 2016-04-09
  • 打赏
  • 举报
回复
引用 15 楼 Junio_2014 的回复:
楼主怎么去掉的,前面的data:image/jpeg;base64, 前缀,我想到用截取 但是可能不通用吧,有通用的方法吗?
imgStr = imgStr.replace("data:image/jpeg;base64,", ""); 替换
gaogao1022 2016-03-19
  • 打赏
  • 举报
回复
楼主 同遇到这个问题,请问你是怎么解决的
奋斗的松树苗 2016-03-16
  • 打赏
  • 举报
回复
emoven 2016-01-08
  • 打赏
  • 举报
回复
楼主好银,我刚好也遇到这样的问题,谢谢了
Toddy_Lin 2016-01-04
  • 打赏
  • 举报
回复
$result = preg_replace("/^(data:\s*image\/(\w+);base64,)/" , '' , $base64);
浅浅love 2015-12-04
  • 打赏
  • 举报
回复
引用 10 楼 jsynzzp 的回复:
来补个完整的结局吧。 就是因为没有把data:image/jpeg;base64,这个前缀给去掉纠结了我那么多天
=_=昨天也为了这个郁闷了一下午。。。。。今天忽然想到了,然后刚要试试就看见lz的贴子了,于是毫不犹豫的解决了(ง •̀_•́)ง。
dream新世界 2015-11-27
  • 打赏
  • 举报
回复
感谢楼主啊啊啊啊啊!我也郁闷了大半天
李小斌同學 2015-11-25
  • 打赏
  • 举报
回复
楼主怎么去掉的,前面的data:image/jpeg;base64, 前缀,我想到用截取 但是可能不通用吧,有通用的方法吗?
-妖孽 2015-08-31
  • 打赏
  • 举报
回复
引用 11 楼 NRlovestudy 的回复:
摸摸楼主。我也遇到了同样的问题。请问“data:image/jpeg;base64,这个前缀”这个前缀在哪里呀?
src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAoHBwgH..." base64就是这种格式的啊,转换的时候要把前面的data:image/jpeg;base64,这一段给去掉
引用 13 楼 kiss716pp 的回复:
楼主我也遇到同样的问题了,base64 imgString可以保存pc上,但是打开是这样的,这种情况遇到过吗?
没有遇到过,我也只是用过一次这个而已,也不怎么懂的,其实转换的代码也就那么几行,代码不抄错,base64串没问题应该就可以成功的,你所有图片都这样么
for (int i = 0; i < b.length; ++i) {
    if (b[i] < 0) {// 调整异常数据
        b[i] += 256;
    }
}
是不是这一段没有写好?
加载更多回复(13)

81,091

社区成员

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

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