2013-10-08 73 views
2

我正在使用此代碼使用apache commons.imaging(快照)獲取這三個不同的元數據屬性('對象名稱','ImageDescription'和'關鍵字')。但是,我不知道如何寫入這些屬性。有人知道正確的方法嗎?在此先感謝...如何將元數據寫入.JPG?

IImageMetadata metadata = null; 
String name; 

try { 
    metadata = Imaging.getMetadata(new File(filename)); 
} catch (ImageReadException | IOException e) { 
} 

if (metadata instanceof JpegImageMetadata) { 
    final JpegImageMetadata jpegMetadata = (JpegImageMetadata) metadata; 
    final List<IImageMetadataItem> items = jpegMetadata.getItems(); 

    for (int i = 0; i < items.size(); i++) { 
     final IImageMetadataItem item = items.get(i); 
     name = item.toString().substring(0, item.toString().indexOf(":")); 
     switch (name) { 
     case "Object Name" : 
     case "ImageDescription" : 
     case "Keywords" : 
     System.out.println(item.toString()); 
     break; 
     } 
    } 
} 

回答

4

apache.commons.imaging的format overview page說,IPTC元數據寫入不支持,但EXIF元數據寫入的。爲了編寫EXIF元數據,我也搜索了一下,發現一個example。所以,你必須做的是沿着線的東西:

final TiffImageMetadata exif = jpegMetadata.getExif(); 
TiffOutputSet outputSet = exif.getOutputSet(); 

然後添加或刪除和添加(=更新)標籤,並在最後:

new ExifRewriter().updateExifMetadataLossless(jpegImageFile, os, outputSet); 

與jpegImageFile文件(輸入)和輸出到輸出文件的OutputStream。

+0

Thanks Trilarion!這很酷。 但是,仍然無法找到如何添加或更新「對象名稱」或「關鍵字」標籤。 ExifTagConstants或AllTagConstants中有許多不同的標籤,但不知道在哪裏可以找到它們。 有沒有辦法通過他的鍵名來引用標籤? – gobispo