Java图片读取ImageIO.read()报错问题及解决
更新时间:2024年10月15日 15:47:18 作者:刀下阳光
在使用imageio库读取图片时,如果路径中包含中文,可能会导致读取失败,解决方法是将路径中的中文字符进行转义处理,可以使用ImageUtil.java工具类进行路径转义,从而避免错误,这是一个常见问题,希望本文的解决方案能帮助到遇到相同问题的开发者
使用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; } }
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Java 中的FileReader和FileWriter源码分析_动力节点Java学院整理
本文给大家分享一段示例程序,通过示例代码可以看出FileReader是基于InputStreamReader实现的,FileWriter是基于OutputStreamWriter实现的,具体程序代码大家通过本文了解下吧2017-05-05maven项目中<scope>provided</scope>的作用及说明
这篇文章主要介绍了maven项目中<scope>provided</scope>的作用及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2023-12-12JavaWeb dbutils执行sql命令并遍历结果集时不能查到内容的原因分析
这篇文章主要介绍了JavaWeb dbutils执行sql命令并遍历结果集时不能查到内容的原因分析及简单处理方法,文中给大家介绍了javaweb中dbutils的使用,需要的朋友可以参考下2017-12-12
最新评论