[英]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段。
您正在編寫的BufferedImage
或RenderedImage
中也沒有Exif元數據,因為這些類型的對象僅包含像素數據。
如果要提取Exif元數據,則需要找到對原始文件的引用,該原始文件是您從中讀取圖像( imagine
)並從那里讀取的。
*) ImageIO
和標准JPEGImageWriter
可以寫入Exif元數據,但JPEGImageWriter
是您必須使用IIOMetadata
API將Exif元數據傳遞給寫入器。 但是我認為這與您的用例無關。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.