读取Java中TIFF图像的像素长宽比

时间:2013-12-30 10:04:33

标签: java image-processing bufferedimage tiff jai

我正在阅读并使用ImageIO和JAI处理TIF图像。除了许多TIF图像没有方形像素外,结果都完美无缺。在处理过程中像素的纵横比正在丢失,因此得到的图像看起来很拉伸。

我发现这个问题在C#中读出了解决方案:Change tiff pixel aspect ratio to square但我在java中找不到任何等价物。

有没有人知道如何在Java中读取BufferedImage和/或TIF图像的水平和垂直分辨率(不是大小),或者让JAI在加载图像时缩放图像以使得结果像素是方形的?

2 个答案:

答案 0 :(得分:1)

经过一个小时的谷歌搜索和尝试后,我认为我找到了解决方案。

    IIOMetadata iiom = ir.getImageMetadata(i);
    TIFFDirectory dir = TIFFDirectory.createFromMetadata(iiom);

    TIFFField fieldXRes = dir.getTIFFField(BaselineTIFFTagSet.TAG_X_RESOLUTION);
    TIFFField fieldYRes = dir.getTIFFField(BaselineTIFFTagSet.TAG_Y_RESOLUTION);

    int xRes = fieldXRes.getAsInt(0);
    int yRes = fieldYRes.getAsInt(0);

答案 1 :(得分:1)

作为替代方案,如果您不想依赖JAI API(或根本不依赖于TIFF格式),您也可以从Standard Metadata获取相同的值。

Dimension元素包含子元素HorizontalPixelSizeVerticalPixelSize,它们应该等同于您从上面的TIFF标记获得的值,以及PixelAspectRatio你可以直接使用。