【发布时间】:2018-05-19 07:57:28
【问题描述】:
在 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。您应该使用ImageReader类来读取和复制图像元数据 -
我不想复制任何元数据。 PNG 图像甚至没有任何 EXIF 条目。我想根据 EXIF 值转换图像,然后将其保存为另一种格式,忘记 EXIF 条目
-
是的,PNG。对不起,我忘了这件事。但无论如何,您必须手动提取元数据并使用它来转换您的图像。这个库也不错:github.com/drewnoakes/metadata-extractor
-
@Uata 你的信息来源是什么。
ImageIO.read()所做的只是为图像类型构造一个适当的ImageReader,然后调用它。因此很难看出它如何避免处理 EXIF 元数据。
标签: java exif javax.imageio