簡體   English   中英

元數據提取器Java不提取exif或iptc

[英]Metadata extractor java doesn't extract exif or iptc

我正在嘗試獲取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元數據,但JPEGImageWriter是您必須使用IIOMetadata API將Exif元數據傳遞給寫入器。 但是我認為這與您的用例無關。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM