元数据提取器java不';t提取exif或iptc

元数据提取器java不';t提取exif或iptc,java,metadata,exif,iptc,metadata-extractor,Java,Metadata,Exif,Iptc,Metadata Extractor,我正在尝试获取jpeg图像的exif,但它不起作用。首先,我使用BuffereImage读取图像并将其转换为文件,然后应用与此处相同的代码:。我做错了什么?为什么JpegSegmentReader.SEGMENT_APP1返回空值 File outfile = new File("image.jpg"); ImageIO.write(imagine, "jpg", outfile); try{ JpegSegmentReader segmentRe

我正在尝试获取jpeg图像的exif,但它不起作用。首先,我使用BuffereImage读取图像并将其转换为文件,然后应用与此处相同的代码:。我做错了什么?为什么JpegSegmentReader.SEGMENT_APP1返回空值

    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)。因此,代码中永远不会有APP1段

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

如果要提取Exif元数据,需要找到对从中读取图像(
imagine
)的原始文件的引用,然后从中读取

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