gpt4 book ai didi

java - ImageIO.read() 是否考虑 EXIF 方向元数据?

转载 作者:行者123 更新时间:2023-12-02 10:50:59 26 4
gpt4 key购买 nike

在 JPEG 图像中,有时会包含 EXIF 元数据,并告知图像应以什么方向显示。

问题是,Java 的 ImageIO.read() 在读取 JPEG 图像时是否考虑 EXIF,并自动应用转换。

更具体地说,如果我使用Java的ImageIO将带有EXIF的JPEG图像转换为PNG图像,PNG图像的方向是否正确?或者下面的代码是否会在不考虑 EXIF 方向指令的情况下生成 PNG 图像?

private byte[] convertToPng(byte[] imageFileAsByteArray) {
ByteArrayInputStream bis = new ByteArrayInputStream(imageFileAsByteArray);
BufferedImage bi = ImageIO.read(bis);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ImageIO.write(bi, "png", bos);

return bos.toByteArray();
}

最佳答案

不幸的是,简短的回答是,不; ImageIO.read(..)(默认情况下)不考虑 Exif Orientation 标签。您的 PNG 将不会相应地旋转。

<小时/>

但是,ImageIO.read(..) 在内部执行的所有操作都是为输入查找适当的 ImageReader 插件,并将读取委托(delegate)给它。虽然 JRE 捆绑的插件不考虑 Exif,但可以在第三方 ImageReader 中添加对它的支持。不幸的是,我不知道有任何这样做,但我正在考虑添加 Exif orientation support to the TwelveMonkeys ImageIO JPEGImageReader将来。

同时,您必须通过读取元数据并轮换来自行应用轮换。方向标签的值可以使用 ImageIO JPEG metadata 获取。或一些第三方库。我认为提到的都是metadata-extractorTwelveMonkeys ImageIO可以用于此目的。 JAI ImageIO(使用 TIFF 元数据)可能也可以做到这一点。

如果使用 ImageIO JPEG 元数据,请注意:

Note that an application wishing to interpret Exif metadata given a metadata tree structure in the javax_imageio_jpeg_image_1.0 format must check for an unknown marker segment with a tag indicating an APP1 marker and containing data identifying it as an Exif marker segment.

关于java - ImageIO.read() 是否考虑 EXIF 方向元数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47657302/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com