关于base64字符串转换成图片写到文件夹问题

qq_40188762 2017-09-20 11:12:03
请教大家一个问题,我现在做个功能是用摄像头拍到的照片获取到的照片转到成了base64字符串了,然后想用获取到的base64字符串转换成图片写到硬盘,方法代码如下,但是写出来的照片显示不完整,就只有头部显示了一些而已,请问下有人知道是什么原因吗?



//base64字符串转化成图片
public static boolean GenerateImage(String imgStr)
{ //对字节数组字符串进行Base64解码并生成图片
if (imgStr == null) //图像数据为空
return false;
BASE64Decoder decoder = new BASE64Decoder();
try
{
//Base64解码
byte[] b = decoder.decodeBuffer(imgStr);
for(int i=0;i<b.length;++i)
{
if(b[i]<0)
{//调整异常数据
b[i]+=256;
}
}
//生成jpeg图片
String imgFilePath = "D:\\tupian\\new.jpg";//新生成的图片
OutputStream out = new FileOutputStream(imgFilePath);
out.write(b);
out.flush();
out.close();
return true;
}
catch (Exception e)
{
return false;
}
}
...全文
629 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Freefish1994 2017-09-20
  • 打赏
  • 举报
回复
看看是否传入的Base64字符串是正确的,可以试试先找一个普通的图片用Base64加密然后再转成图片看看可不可以
qq_40188762 2017-09-20
  • 打赏
  • 举报
回复
可以了,找出原因了,原来是我们从前端获取到图片字符串数据有问题,字符串转换数据的方法是没问题的。谢谢了。
Freefish1994 2017-09-20
  • 打赏
  • 举报
回复
不行的话试试这个,刚写了一个,需要导入apache的codec jar包 jar包下载: http://commons.apache.org/proper/commons-codec/download_codec.cgi

public class Test {
	public static void main(String[] args) {
		String filePath = "D:/source.png"; // 图片资源路径
		String writePath = "D:/target/target.png"; //要写入的图片路径及名称
		writeImage(getImageStr(filePath), writePath);
	}

	// 图片转Base64
	private static String getImageStr(String imgPath) {
		byte[] data = null;
		InputStream input = null;
		try {
			input = new FileInputStream(imgPath);
			data = new byte[input.available()];
			input.read(data);
			return new String(Base64.encodeBase64String(data));
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				input.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return StringUtils.EMPTY;
	}

	// Base64转图片
	private static void writeImage(String imgStr, String writePath) {
		try {
			byte[] bytes = Base64.decodeBase64(imgStr);
			for (int i = 0; i < bytes.length; ++i) {
				if (bytes[i] < 0)
					bytes[i] += 256;
			}
			OutputStream out = new FileOutputStream(writePath);
			out.write(bytes);
			out.flush();
			out.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
Freefish1994 2017-09-20
  • 打赏
  • 举报
回复
引用 4 楼 qq_40188762 的回复:
这个没试过 我试试看。 我的是做个人脸识别,直接在网页拍照,然后直接获取前端页面的照片转成字符串,再把字符串转成照片保存到本地这样的一个过程的。
建议你试一下本地图片,如果可以的话说明是你前端页面传入的Base64字符串不全有缺失,或者是错误的
qq_40188762 2017-09-20
  • 打赏
  • 举报
回复
这个没试过 我试试看。 我的是做个人脸识别,直接在网页拍照,然后直接获取前端页面的照片转成字符串,再把字符串转成照片保存到本地这样的一个过程的。
Freefish1994 2017-09-20
  • 打赏
  • 举报
回复
引用 2 楼 qq_40188762 的回复:
字符串应该是没问题的 9j开头的 ,真的不好找原因
本地图片转成Base64字符串再通过base64的字符串保存成图片也不可以?
qq_40188762 2017-09-20
  • 打赏
  • 举报
回复
字符串应该是没问题的 9j开头的 ,真的不好找原因

50,526

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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