Base64图片保存到本地,及解决图片无法打开问题
本demo主要解决两个问题
- 图片保存的执行过程中,代码没有报错,但是图片没有生成
- 图片保存到本地了,但是打不开,或者文件损坏等
直接上代码
public static boolean GenerateImg(String imgStr,String path){
//对字节数组字符串进行Base64解码并生成图片
if (imgStr == null||StringUtils.isBlank(path)){ //图像数据为空,或者路径为空
return false;
}
BASE64Decoder decoder = new BASE64Decoder();//新new一个base64解码的对象
//这里要注意:前台在用Ajax传base64值的时候会把base64中的+换成空格,所以需要替换回来,然后去除没用的部分。我这里传的值,先把+替换回空格,然后去掉base64编码的没用的东西
imgStr = imgStr.replaceAll(" ", "+").split("base64,")[1];
try
{
//Base64解码
byte[] b = decoder.decodeBuffer(imgStr);
for(int i=0;i<b.length;++i)
{
if(b[i]<0)
{//调整异常数据
b[i]+=256;
}
}
//生成jpeg图片,手机的图片一般都是jpeg格式的
//这里注意,path为:D://imgs//dog.jpeg,保存到本地前先判断下父文件夹(D://imgs)是否存在,不存在先创建父文件夹。
File dest = new File(path);
if (!dest.getParentFile().exists()) {
dest.getParentFile().mkdirs();
}
OutputStream out = new FileOutputStream(path);
out.write(b);
out.flush();
out.close();
}
catch (Exception e)
{
return false;
}
return true;
}