Java支持类型扩展
Java ImageIo所支持的文件后缀类型并不多, 一般就那么几个, 有时候我们需要用一些其他的类型文件, imageIo读出来就是一个null.
这个时候我们可以通过一下jar包来使其支持, 例如 iamge.raw文件.
引入jar包
<dependency>
    <groupId>com.sun.media</groupId>
    <artifactId>jai-codec</artifactId>
    <version>1.1.3</version>
</dependency>
这个jar包我没有试过. 也不知道他的效果怎么样. 不过应该是可以的.
引入jar包(2)
<dependency>
    <groupId>com.sun.media</groupId>
    <artifactId>jai-imageio</artifactId>// artifactId + version = jar包的名字, 例如jar-imageio-1.1.jar
    <version>1.1</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/src/main/resources/lib/jai-imageio-1.1.jar</systemPath>
</dependency>
这个jar包我放在当前目录下了, 在springboot里面引入jar方式如下:

image.png
该jar需要放在resource/lib 文件夹下.
如果是这个方式,maven打包的时候需要注意

image.png
<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <mainClass>com.zixing.WebApplication</mainClass>
        <includeSystemScope>true</includeSystemScope>
    </configuration>
</plugin>
需要添加 <includeSystemScope>true</includeSystemScope> 否则maven或者jenkins打包的时候jar加载不进来.
使用方法
使用方式和之前的imageIO的使用方式是一样的,例如:
BufferedImage image = ImageIO.read(inputStream);
下面是一个图片反色的代码:
public static InputStream inverse(InputStream inputStream) {
    ByteArrayOutputStream os = null;
    try {
        BufferedImage image = ImageIO.read(inputStream);
        //生成字符图片
        int w = image.getWidth();
        int h = image.getHeight();
        BufferedImage imageBuffer = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
        // 绘制字符
        for (int y = 0; y < h; y++) {
            for (int x = 0; x < w; x++) {
                int rgb = image.getRGB(x, y);
                int R = (rgb & 0xff0000) >> 16;
                int G = (rgb & 0x00ff00) >> 8;
                int B = rgb & 0x0000ff;
                int newPixel = colorToRGB(255 - R, 255 - G, 255 - B);
                imageBuffer.setRGB(x, y, newPixel);
            }
        }
        os = new ByteArrayOutputStream();
        ImageIO.write(imageBuffer, "png", os);
        return new ByteArrayInputStream(os.toByteArray());
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            if (os != null) {
                os.close();
            }
        } catch (Exception e){
            e.printStackTrace();
        }
    }
    return inputStream;
}