Java ImageIO Class 绘制图像并保存为 TIFF

Java ImageIO Class Drawing Image and Saving as TIFF

Java 1.8_201 在 Windows 7(32 位) 下面是我的代码。我无法附加图像,因为 TIFF 不是受支持的格式。 我不明白为什么我创建的 TIFF 图像颜色颠倒了。 JPEG 图像似乎没问题。 根据 Windows 照片查看器,图像具有以下属性:

back.tif

宽度 = 1337 像素

高度 = 712 像素

水平分辨率 = 200 dpi

垂直分辨率 = 200 dpi

位深度 = 1

压缩 = CCITT T.6

与文件 front.tif

相似

both.tif

宽度 = 1340 像素

高度 = 1425 像素

水平分辨率 = 1 dpi

垂直分辨率 1 dpi

位深度 = 1

压缩 = 未压缩

back2.jpg

宽度 = 1337 像素

高度 = 712 像素

水平分辨率 = 200 dpi

垂直分辨率 = 200 dpi

位深度 = 8

(未显示压缩详细信息)

both2.jpg

宽度 = 1340 像素

高度 = 1425 像素

水平分辨率 = 96 dpi

垂直分辨率 = 96 dpi

位深度 = 8

(未显示压缩详细信息)

我的代码:

import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;

public class TwoImage {
    public static void main(String[] args) {
//        File back = new File("C:\temp\back2.jpg");
        File front = new File("C:\temp\front.tif"); // width = 1340 , height = 713
//        File front = new File("C:\temp\front2.jpg");
        File back = new File("C:\temp\back.tif"); // width = 1337 , height = 712
        try {
            BufferedImage bImg = ImageIO.read(back);
            BufferedImage fImg = ImageIO.read(front);
            BufferedImage img2 = new BufferedImage(1340,
                                                   1425,
//                                                   BufferedImage.TYPE_BYTE_GRAY);
                                                   BufferedImage.TYPE_BYTE_BINARY);
            Graphics2D g2D = img2.createGraphics();
            g2D.drawImage(fImg, 0, 0, null);
            g2D.drawImage(bImg, 0, 713, null);
            g2D.dispose();
//            File output = new File("C:\temp\both2.jpg");
            File output = new File("C:\temp\both.tif");
//            ImageIO.write(img2, "JPEG", output);
            ImageIO.write(img2, "TIFF", output);
        }
        catch (Exception x) {
            x.printStackTrace();
        }
    }
}

我编写了一个测试程序,用于加载其中一张 TIFF 图像并将其显示为 JLabel 上的图标,并以相反的颜色显示。因此,我假设 JDK 1.8.0_201 附带的默认 TIFF 图像 reader 在这里不合适。所以我猜我可能需要更改默认设置,可能是通过 class 'javax.imageio.plugins.tiff.TIFFImageReadParam'。但后来我发现 TwelveMonkeys 及其默认的 TIFF 图像 reader 正确处理了我的 TIFF 图像,这就是我解决问题的方法。