gpt4 book ai didi

java - 元数据提取器 java 不提取 exif 或 iptc

转载 作者:太空宇宙 更新时间:2023-11-04 06:42:09 26 4
gpt4 key购买 nike

我试图获取 jpeg 图像的 exif,但它不起作用。首先,我使用 BufferedImage 读取图像并将其转换为文件,然后应用与此处相同的代码: https://code.google.com/p/metadata-extractor/source/browse/Samples/com/drew/metadata/SampleUsage.java?name=2.5.1 。我究竟做错了什么?为什么 JpegSegmentReader.SEGMENT_APP1 返回 null?

    File outfile = new File("image.jpg");
ImageIO.write(imagine, "jpg", outfile);
try{
JpegSegmentReader segmentReader = new JpegSegmentReader(outfile);
byte[] exifSegment = segmentReader.readSegment(JpegSegmentReader.SEGMENT_APP1);
System.out.println(Arrays.toString(segmentReader.readSegment(JpegSegmentReader.SEGMENT_APP1)));
byte[] iptcSegment = segmentReader.readSegment(JpegSegmentReader.SEGMENT_APPD);
Metadata metadata = new Metadata();
if (exifSegment != null)
new ExifReader().extract(new ByteArrayReader(exifSegment), metadata);
if (iptcSegment != null)
new IptcReader().extract(new ByteArrayReader(iptcSegment), metadata);
printImageTags(metadata);
}catch (JpegProcessingException e) {
System.err.println("error 3a: " + e);
}

最佳答案

ImageIO.write() 不写入 Exif 元数据* (APP1/Exif)。它仅在 APP0 段中存储 JFIF(有关 Exif/JFIF 的更多信息,请参阅 WikiPedia 上的 JPEG)。因此,您的代码中永远不会有 APP1 段。

您正在编写的 BufferedImageRenderedImage 中也没有可用的 Exif 元数据,因为这些类型的对象仅包含像素数据。

如果您想提取 Exif 元数据,您需要找到对从中读取图像 (imagine) 的原始文件的引用,并从那里读取。

*) ImageIO 和标准 JPEGImageWriter 可以写入 Exif 元数据,但前提是您使用 IIOMetadata API 将 Exif 元数据传递给写入器。但我认为这与您的用例无关。

关于java - 元数据提取器 java 不提取 exif 或 iptc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24552733/

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