使用imageio直接读取图片报错问题重现


原因分析
路径中包含中文解决方案:
将路径中的中文进行转义
urlencoder.encode(filename,"utf-8")
imageutil.java工具类:
package com.test.common.utils;
import sun.misc.base64decoder;
import sun.misc.base64encoder;
import javax.imageio.imageio;
import java.awt.image.bufferedimage;
import java.io.bytearrayoutputstream;
import java.io.file;
import java.io.fileoutputstream;
import java.io.ioexception;
import java.net.malformedurlexception;
import java.net.url;
public class imageutil {
/**
* 描述:将图片地址进行base64编码
*/
public static string encodeimgagetobase64(url imageurl) {// 将图片文件转化为字节数组字符串,并对其进行base64编码处理
bytearrayoutputstream outputstream = null;
try {
bufferedimage bufferedimage = imageio.read(imageurl);
outputstream = new bytearrayoutputstream();
imageio.write(bufferedimage, "jpg", outputstream);
} catch (malformedurlexception e1) {
e1.printstacktrace();
} catch (ioexception e) {
e.printstacktrace();
}
// 对字节数组base64编码
base64encoder encoder = new base64encoder();
return encoder.encode(outputstream.tobytearray());// 返回base64编码过的字节数组字符串
}
/**
* 描述:将图片文件进行base64编码
*/
public static string encodeimgagetobase64(file imagefile) {// 将图片文件转化为字节数组字符串,并对其进行base64编码处理
bytearrayoutputstream outputstream = null;
try {
bufferedimage bufferedimage = imageio.read(imagefile);
outputstream = new bytearrayoutputstream();
imageio.write(bufferedimage, "jpg", outputstream);
} catch (malformedurlexception e1) {
e1.printstacktrace();
} catch (ioexception e) {
e.printstacktrace();
}
// 对字节数组base64编码
base64encoder encoder = new base64encoder();
return encoder.encode(outputstream.tobytearray());// 返回base64编码过的字节数组字符串
}
/**
* 描述:将base64图片解码并保存
*/
public static file decodebase64toimage(string base64, string path, string imgname) {
base64decoder decoder = new base64decoder();
file file=null;
try {
file=new file(path + imgname);
fileoutputstream write = new fileoutputstream(file);
string replase=base64.replace("data:image/jpeg;base64,","");
byte[] decoderbytes = decoder.decodebuffer(replase);
write.write(decoderbytes);
write.close();
} catch (ioexception e) {
e.printstacktrace();
}
return file;
}
}
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论