JAI Tiff到JPEG的转换问题

Jan Welter:

我在使用JAI将Tiff文件转换为JPEG时遇到问题。这是我的代码:

ByteArrayOutputStream baos = new ByteArrayOutputStream();
        
TIFFDecodeParam param = null;
ImageDecoder dec = ImageCodec.createImageDecoder("tiff", new FileSeekableStream(inPath), param);
RenderedImage op = dec.decodeAsRenderedImage(0);
        
JPEGEncodeParam jpgparam = new JPEGEncodeParam();
jpgparam.setQuality(67);
ImageEncoder en = ImageCodec.createImageEncoder("jpeg", baos, jpgparam);
en.encode(op);

通常,此代码可以正常工作,但是对于某些图像,我收到以下错误:

java.lang.RuntimeException: Only 1, or 3-band byte data may be written.
at com.sun.media.jai.codecimpl.JPEGImageEncoder.encode(JPEGImageEncoder.java:142)

我在这里找不到任何相关的问题,我也不知道如何解决。引发此错误的图像具有高分辨率(9000 x 7000或更高),并且大多数是对旧照片的扫描。

有人可以解释此错误消息的含义以及如何解决吗?

非常感谢您的建议!

具有此ColorModel的图像有效:

ColorModel: 
#pixelBits = 24 
numComponents = 3 
color space = java.awt.color.ICC_ColorSpace@21981a50 
transparency = 1 has alpha = false 
isAlphaPre = false

这不是:

ColorModel: 
#pixelBits = 16 
numComponents = 1 
color space = java.awt.color.ICC_ColorSpace@88a30ad 
transparency = 1 has alpha = false 
isAlphaPre = false
马特:

我尝试阅读JPEG标准,但尚不清楚这是JPEG格式的限制还是仅仅是编码器。

Java提供的编码器仅对1或3 个字节的带进行编码,因此在您的情况下有16位灰度图像。解决此问题的一种方法是使用PNG编码器保存图像。它不支持压缩质量参数。

处理此问题的另一种方法是将图像另存为8位灰度图像。

我做了一个简单的例子来测试这个没有JAI的代码。

public static void main(String[] args) throws Exception{
        BufferedImage img = new BufferedImage(256, 256, BufferedImage.TYPE_USHORT_GRAY);
        Iterator<ImageWriter> writers = ImageIO.getImageWritersBySuffix("jpg");
        while( writers.hasNext() ){
            ImageWriter writer = writers.next();
            ImageOutputStream ios = ImageIO.createImageOutputStream( new File("junk.jpg") );
            writer.setOutput(ios);
            writer.write(img);
        }     
    }

我看到的最简单的转换方法是创建一个新图像,并使用图形对其进行绘制。

BufferedImage img2 = new BufferedImage(img.getWidth(), img.getHeight(), BufferedImage.TYPE_BYTE_GRAY);
Graphics g = img2.getGraphics();
g.drawImage(img, 0, 0);
g.dispose();

然后img2可以另存为JPG。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章