java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java图片读取ImageIO.read()报错

Java图片读取ImageIO.read()报错问题及解决

作者:刀下阳光

在使用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;
    }
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文