jdk1.8,jpg处理报javax.imageio.IIOException: Invalid icc profile: bad sequence number

youngjdong 发布于 2015/12/07 10:54
阅读 2K+
收藏 0
JDK

jdk1.8环境,处理JPG读写,

image = ImageIO.read(f);


javax.imageio.IIOException: Invalid icc profile: bad sequence number


处理下

JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(new FileInputStream(f)); //image = decoder.decodeAsBufferedImage();


但考虑到jdk1.7后不再提供 

JPEGCodec
该怎么处理
加载中
0
hibegin
hibegin
// 将该图片以指定格式绘制到输入流(浏览器) 

try {
    // 将图像输出到客户端
    // 明显在这里就直接停止了,根本在Jre找不到这个类
    JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(response
            .getOutputStream());
    encoder.encode(img);
} catch (IOException e) {
    e.printStackTrace();
}





于是得考虑换种方式了

try {
    //更改后方式 不使用JPEGImageEncoder方式去响应输出流
    ByteArrayOutputStream bs = new ByteArrayOutputStream(); 
    ImageOutputStream imOut = ImageIO.createImageOutputStream(bs);
    ImageIO.write(img, "png",imOut);
    response.getOutputStream().write(bs.toByteArray());
} catch (IOException e) {
    e.printStackTrace();
}





使用 JPEGImageDecoder 是会有一些问题额(我当时遇到的问题是多线程环境下,会出现无法正确的Codec 甚至由于异常过多后,JVM都意外被终止了)


你可以使用 ImageIO 来做额。

0
youngjdong
youngjdong

现在问题是

```

ImageIO.write(img, "png",imOut);

```

img 怎么得到

hibegin
hibegin
当时 img 应该是 BufferedImage 这个,是在内存画一个。然后以 png 响应出去的。 是为了做验证码
0
Kingson_Wu
Kingson_Wu
楼主的问题解决了吗?
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部