用于奇怪图像类型的Java JPEG转换器

时间:2011-10-06 15:32:38

标签: java jpeg converter

我有一个程序,使用mortennobel图像库重新缩放图像,用于重新缩放滤镜/算法。我正在使用Java标准库ImageIO将文件读入BufferedImage对象。但是我遇到的麻烦是ImageIO库只接受标准形式的图像,所以如果ImageIO.read()函数抛出一个IOException我想抓住它并将图像转换为标准形式,如一个JPEG。

只是为了澄清,我遇到的问题是某些图像不是标准的JPEG格式,即FF D8 FF E0 JFIF,而是由数码相机制作或在photoshop中编辑,格式为FF D8 FF E1 Exif。可以通过将图像加载到像paint这样的程序并再次保存为JPEG来改变这种格式,但它不适合我的情况,因为我希望它是自动化的。

FF D8 FF E1 Exif转换为FF D8 FF E0 JFIF

1 个答案:

答案 0 :(得分:3)

FFE0标记后的第一个字段是长度字段。它是16位长的大端,包括长度字段的长度,但不包括FFE0标记。只需从现有的jpeg中复制FFE0标记和相关数据,并将其放入FFD8和FFE1之间。

根据JFIF标准,在SOI(FFD8)之后应立即跟随JFIF标题。没有JFIF标头的每个jpeg基本上都被破坏了,因为无法知道使用什么颜色编码。当然还有Adobe jpeg,但它们并不算数。如果有JFIF标题,您就知道图像是在YCbCr中编码的。如果没有JFIF标题,你可以假设它是YCbCr,但你无法确定。

您可以在此处详细了解JFIF标准:http://www.w3.org/Graphics/JPEG/jfif3.pdf