为什么 java.awt.image.BufferedImage#getType 返回不同的值 Mac 和 Mac中央操作系统
我有一个关于 BufferedImage#getType 方法。当从文件系统引用 PNG 图像时,以下代码将使用此 JVM 在我的 Mac 中打印 5 并在 CENTOS 机器中打印 0:
java version "1.6.0_03" Java(TM) SE 运行时环境(版本 1.6.0_03-b05) Java HotSpot(TM) 64 位服务器 VM(版本 1.6.0_03-b05,混合模式)
import java.awt.*;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import java.io.*;
public class ImageTypeTest {
public static void main(String[] args) throws Exception{
BufferedImage sourceImage = ImageIO.read(new File("/path/to/png.png"));
System.out.println(sourceImage.getType());
}
}
任何人都可以阐明可能导致此差异的原因,以便我可以解决它吗?该代码对于其他图像类型(例如 GIF 图像)返回相同的值。
谢谢
I have a question about the BufferedImage#getType method. When referencing a PNG image from the file system, the following code will print 5 in my Mac and 0 in a CENTOS box with this JVM:
java version "1.6.0_03"
Java(TM) SE Runtime Environment (build 1.6.0_03-b05)
Java HotSpot(TM) 64-Bit Server VM (build 1.6.0_03-b05, mixed mode)
import java.awt.*;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import java.io.*;
public class ImageTypeTest {
public static void main(String[] args) throws Exception{
BufferedImage sourceImage = ImageIO.read(new File("/path/to/png.png"));
System.out.println(sourceImage.getType());
}
}
Can anyone please shed some light as to what might be causing this difference so that I can work around it? The code returns the same values for other image types, say GIF images.
Thank you
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
造成差异的原因是 OS X 和 CENTOS 中的 Java 实现使用不同的底层库来解析 PNG 图像——这是允许的,因为 ImageIO 的合同中没有任何内容要求它生成特定的图像类型。
如果您想要获得一致(且快速绘制)的图像,最好的办法是使用以下代码将图像转换为显示系统使用的颜色空间:
The reason for the difference is that the Java implementations in OS X and CENTOS use different underlying libraries to parse the PNG image - which they're allowed to, as there is nothing in ImageIO's contract requiring it to produce a particular image type.
If you want to have a consistent (and fast to draw) image, the best thing to do is to use the following code to convert the image into the colour space being used by the display system: