使用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; } }
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论