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 图像,这就是我解决问题的方法。
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 图像,这就是我解决问题的方法。