commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Farrukh Najmi <farr...@wellfleetsoftware.com>
Subject Re: [IMAGING] Getting EXIF and IPTC metadata using metadata and image format neutral code
Date Tue, 03 Jul 2012 15:01:27 GMT
Moving this thread to dev list as it seems to be more appropriate there....

Attached is a patch to the IImageMetadata.java that reflects my revised 
proposal thinking this through in conjunction with the proposed solution 
in another 
<http://mail-archives.apache.org/mod_mbox/commons-dev/201207.mbox/ajax/%3C4FF213A5.3090600%40wellfleetsoftware.com%3E>

thread...

  * Add a getMetadataSpecification() method to IImageMetadata so we can
    manage the metadata specification that defines the metadata
  * Add getMetadata() to nested class IImageMetadataItem to get back at
    the parent IImageMetadata instance so we can access the metadata
    specification information managed from an IImageMetadata instance
  * Add getId(), getName(), getDescription() methods to nested class
    IImageMetadataItem. These are the key triplet of info about the
    metadata item that is needed in my experience

Of course implementations of these two interfaces would need to also be 
updated to support the new methods according to proposed semantics. I 
would be happy to contribute in any way that I can and as requested.

Dev team colleagues, please weigh in on the proposal. Thanks for your 
awesome work to create this project and for considering this proposal.

On 07/02/2012 07:12 PM, Farrukh Najmi wrote:
>
> Here is a proposed change to the API that would help my scenario...
>
> Modify the org.apache.commons.imaging.common.ImageMetadata$Item class 
> to have the following additional methods:
>
>   * getMetadataSpecification() method that returns a constant String
>     such as "IPTC:1.1", "EXIF:2.1", "EXIF:2.2"
>   * getId() method that returns a unique id as follows:
>       o For EXIF return the Field Name as in Table 3 TIFF Rev. 6.0
>         Attribute Information Used in Exif in the Exif spec
>         <http://www.exif.org/Exif2-2.PDF>.
>       o For IPTC return the IptcRecord..iptcType.getType()
>
> This would allow the first code pattern below to identify each item 
> based on a specific metadata field defined by a specific specification.
>
> Thoughts?
>
> On 07/02/2012 06:18 PM, Farrukh Najmi wrote:
>>
>> Hi Guys,
>>
>> I am trying to use commons-imaging latest svn bits to write a program 
>> that will read standard metadata such as Exif and IPTC from images in 
>> a variety of image formats using code that is as image format neutral 
>> as possible. The goal is to store each class of metadata (e.g. Exif, 
>> IPTC, ...) in a separate Map where the key identifies a metadata 
>> attribute identifier defined by the standard and a value that is the 
>> metadata attribute's value.
>>
>> Here are two patterns I have identified for reading the metadata by 
>> looking at test programs and code....
>>
>> 1. Read metadata items without considering image format or metadata 
>> standard.
>>
>>             IImageMetadata metadata = Imaging.getMetadata(is, "Oregon 
>> Scientific DS6639 - DSC_0307 - iptc added with irfanview.jpg");
>>             List<? extends IImageMetadata.IImageMetadataItem> items = 
>> metadata.getItems();
>>
>>             int i=0;
>>             for (IImageMetadata.IImageMetadataItem iitem : items) {
>>                 ImageMetadata.Item item = (ImageMetadata.Item)iitem;
>>                 System.err.println("Index: " + i + " Key: " + 
>> item.getKeyword() + " Value: " + item.getText() + " class: " + 
>> iitem.getClass());   //common.ImageMetadata$Item, Tiff.TiffImageMetadata
>>                 i++;
>>             }
>>
>>
>> This is closest to what I want. The EXIF metadata is represented by 
>> org.apache.commons.imaging.formats.tiff.TiffImageMetadata$Item and I 
>> can get at the TiffField and its tagName and value (good). However, 
>> IPTC metadata is represented by 
>> org.apache.commons.imaging.common.ImageMetadata$Item. This class 
>> seems to have no link back to the 
>> org.apache.commons.imaging.formats.jpeg.iptc.IptcRecord and thus I 
>> cannot find a way to get the attribute defined by the IPTC spec 
>> <http://www.iptc.org/std/photometadata/2008/specification/IPTC-PhotoMetadata-2008.pdf>

>> under the IIM mapping rows.
>>
>>
>> 2. Read Exif and IPTC separately using following metadata and image 
>> format specific  patterns as shown below...
>>
>>             //Read EXIF
>>             JpegImageMetadata metadata = (JpegImageMetadata) 
>> Imaging.getMetadata(is, "Oregon Scientific DS6639 - DSC_0307 - iptc 
>> added with irfanview.jpg");
>>             TiffImageMetadata exifMetadata = metadata.getExif();
>>             List<TiffField> fields = exifMetadata.getAllFields();
>>
>>             int i=0;
>>             for (TiffField field : fields) {
>>                 String key = field.getTagName();
>>                 Object value = field.getValue();
>>                 String fieldName = field.tagInfo.name;
>>                 System.err.println("Index: " + i + " Key: " + key + 
>> ", Value: " + value + ", valueType: " + value.getClass());
>>                 i++;
>>             }
>>
>>             //Read IPTC
>>             JpegImageMetadata metadata = (JpegImageMetadata) 
>> Imaging.getMetadata(is, "Oregon Scientific DS6639 - DSC_0307 - iptc 
>> added with irfanview.jpg");
>>             JpegPhotoshopMetadata psMetadata = metadata.getPhotoshop();
>>             List oldRecords = psMetadata.photoshopApp13Data.getRecords();
>>
>>             for (int j = 0; j < oldRecords.size(); j++) {
>>                 IptcRecord record = (IptcRecord) oldRecords.get(j);
>>                 System.err.println("Key: " + 
>> record.iptcType.getName() + " (0x"
>>                             + 
>> Integer.toHexString(record.iptcType.getType())
>>                             + "), value: " + record.value);
>>             }
>>
>> Above gives me all the linkage back to specification defined metadata 
>> fields but is less desirable because it metadata and image format 
>> specific.
>>
>> I feel that it would be ideal to support a generic api that is 
>> agnostic to metadata and image format but provides a reference back 
>> to the specification defined field (attribute) identifier some how.
>>
>> I would very much appreciate some ideas from dev team on how we could 
>> improve the api to support providing a reference back to a 
>> specification defined field in a metadata and image format neutral 
>> manner.
>>
>> My apologies if I am missing an obvious solution while I am getting 
>> familiar with the code.
>

-- 
Regards,
Farrukh

Web: http://www.wellfleetsoftware.com


Mime
View raw message