Android Open Source - PictureMap Jpeg Metadata Reader






From Project

Back to project page PictureMap.

License

The source code is released under:

GNU General Public License

If you think the Android project PictureMap listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * This is public domain software - that is, you can do whatever you want
 * with it, and include it software that is licensed under the GNU or the
 * BSD license, or whatever other licence you choose, including proprietary
 * closed source licenses.  I do ask that you leave this header in tact.
 */*from  www .  ja  v  a 2 s.  c o m*/
 * If you make modifications to this code that you think would benefit the
 * wider community, please send me a copy and I'll post it on my site.
 *
 * If you make use of this code, I'd appreciate hearing about it.
 *   drew@drewnoakes.com
 * Latest version of this software kept at
 *   http://drewnoakes.com/
 *
 * Created by dnoakes on 12-Nov-2002 18:51:36 using IntelliJ IDEA.
 */
package com.drewChanged.imaging.jpeg;

//import com.drewChanged.metadata.Directory;
import com.drewChanged.metadata.Metadata;
import com.drewChanged.metadata.MetadataException;
//import com.drewChanged.metadata.Tag;
//import com.drewChanged.metadata.exif.ExifDirectory;
import com.drewChanged.metadata.exif.ExifReader;
import com.drewChanged.metadata.iptc.IptcReader;
import com.drewChanged.metadata.jpeg.JpegCommentReader;
import com.drewChanged.metadata.jpeg.JpegReader;
//import com.sun.image.codec.jpeg.JPEGDecodeParam;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
//import java.util.Iterator;

/**
 *
 */
public class JpegMetadataReader
{
//    public static Metadata readMetadata(IIOMetadata metadata) throws JpegProcessingException {}
//    public static Metadata readMetadata(ImageInputStream in) throws JpegProcessingException{}
//    public static Metadata readMetadata(IIOImage image) throws JpegProcessingException{}
//    public static Metadata readMetadata(ImageReader reader) throws JpegProcessingException{}

    public static Metadata readMetadata(InputStream in) throws JpegProcessingException
    {
        JpegSegmentReader segmentReader = new JpegSegmentReader(in);
        return extractMetadataFromJpegSegmentReader(segmentReader);
    }

    public static Metadata readMetadata(File file) throws JpegProcessingException
    {
        JpegSegmentReader segmentReader = new JpegSegmentReader(file);
        return extractMetadataFromJpegSegmentReader(segmentReader);
    }

    public static Metadata extractMetadataFromJpegSegmentReader(JpegSegmentReader segmentReader)
    {
        final Metadata metadata = new Metadata();
        try {
            byte[] exifSegment = segmentReader.readSegment(JpegSegmentReader.SEGMENT_APP1);
            new ExifReader(exifSegment).extract(metadata);
        } catch (JpegProcessingException e) {
            // in the interests of catching as much data as possible, continue
            // TODO lodge error message within exif directory?
        }

        try {
            byte[] iptcSegment = segmentReader.readSegment(JpegSegmentReader.SEGMENT_APPD);
            new IptcReader(iptcSegment).extract(metadata);
        } catch (JpegProcessingException e) {
            // TODO lodge error message within iptc directory?
        }

    try {
      byte[] jpegSegment = segmentReader.readSegment(JpegSegmentReader.SEGMENT_SOF0);
      new JpegReader(jpegSegment).extract(metadata);
    } catch (JpegProcessingException e) {
      // TODO lodge error message within jpeg directory?
    }

    try {
      byte[] jpegCommentSegment = segmentReader.readSegment(JpegSegmentReader.SEGMENT_COM);
      new JpegCommentReader(jpegCommentSegment).extract(metadata);
    } catch (JpegProcessingException e) {
      // TODO lodge error message within jpegcomment directory?
    }

        return metadata;
    }

//    public static Metadata readMetadata(JPEGDecodeParam decodeParam)
//    {
//        final Metadata metadata = new Metadata();
//
//        /* We should only really be seeing Exif in _data[0]... the 2D array exists
//         * because markers can theoretically appear multiple times in the file.
//         */
//        // TODO test this method
//        byte[][] exifSegment = decodeParam.getMarkerData(JPEGDecodeParam.APP1_MARKER);
//        if (exifSegment != null && exifSegment[0].length>0) {
//            new ExifReader(exifSegment[0]).extract(metadata);
//        }
//
//        // similarly, use only the first IPTC segment
//        byte[][] iptcSegment = decodeParam.getMarkerData(JPEGDecodeParam.APPD_MARKER);
//        if (iptcSegment != null && iptcSegment[0].length>0) {
//            new IptcReader(iptcSegment[0]).extract(metadata);
//        }
//
//        // NOTE: Unable to utilise JpegReader for the SOF0 frame here, as the decodeParam doesn't contain the byte[]
//
//        // similarly, use only the first Jpeg Comment segment
//        byte[][] jpegCommentSegment = decodeParam.getMarkerData(JPEGDecodeParam.COMMENT_MARKER);
//        if (jpegCommentSegment != null && jpegCommentSegment[0].length>0) {
//            new JpegCommentReader(jpegCommentSegment[0]).extract(metadata);
//        }
//
//        return metadata;
//    }

    private JpegMetadataReader()
    {
    }

    public static void main(String[] args) throws MetadataException, IOException
    {
//        Metadata metadata = null;
//        try {
//            metadata = JpegMetadataReader.readMetadata(new File(args[0]));
//        } catch (Exception e) {
//            e.printStackTrace(System.err);
//            System.exit(1);
//        }
//
//        // iterate over the exif data and print to System.out
//        Iterator directories = metadata.getDirectoryIterator();
//        while (directories.hasNext()) {
//            Directory directory = (Directory)directories.next();
//            Iterator tags = directory.getTagIterator();
//            while (tags.hasNext()) {
//                Tag tag = (Tag)tags.next();
//                try {
//                    System.out.println("[" + directory.getName() + "] " + tag.getTagName() + " = " + tag.getDescription());
//                } catch (MetadataException e) {
//                    System.err.println(e.getMessage());
//                    System.err.println(tag.getDirectoryName() + " " + tag.getTagName() + " (error)");
//                }
//            }
//            if (directory.hasErrors()) {
//                Iterator errors = directory.getErrors();
//                while (errors.hasNext()) {
//                    System.out.println("ERROR: " + errors.next());
//                }
//            }
//        }
//
//        if (args.length>1 && args[1].trim().equals("/thumb"))
//        {
//            ExifDirectory directory = (ExifDirectory)metadata.getDirectory(ExifDirectory.class);
//            if (directory.containsThumbnail())
//            {
//                System.out.println("Writing thumbnail...");
//                directory.writeThumbnail(args[0].trim() + ".thumb.jpg");
//            }
//            else
//            {
//                System.out.println("No thumbnail data exists in this image");
//            }
//        }
    }
}




Java Source Code List

com.aripollak.picturemap.ImageUtilities.java
com.aripollak.picturemap.MainActivity.java
com.aripollak.picturemap.PictureCallout.java
com.aripollak.picturemap.PopulateMapTask.java
com.drewChanged.imaging.PhotographicConversions.java
com.drewChanged.imaging.jpeg.JpegMetadataReader.java
com.drewChanged.imaging.jpeg.JpegProcessingException.java
com.drewChanged.imaging.jpeg.JpegSegmentData.java
com.drewChanged.imaging.jpeg.JpegSegmentReader.java
com.drewChanged.lang.CompoundException.java
com.drewChanged.lang.NullOutputStream.java
com.drewChanged.lang.Rational.java
com.drewChanged.metadata.DefaultTagDescriptor.java
com.drewChanged.metadata.Directory.java
com.drewChanged.metadata.MetadataException.java
com.drewChanged.metadata.MetadataReader.java
com.drewChanged.metadata.Metadata.java
com.drewChanged.metadata.TagDescriptor.java
com.drewChanged.metadata.Tag.java
com.drewChanged.metadata.exif.DataFormat.java
com.drewChanged.metadata.exif.ExifDescriptor.java
com.drewChanged.metadata.exif.ExifDirectory.java
com.drewChanged.metadata.exif.ExifInteropDescriptor.java
com.drewChanged.metadata.exif.ExifInteropDirectory.java
com.drewChanged.metadata.exif.ExifProcessingException.java
com.drewChanged.metadata.exif.ExifReader.java
com.drewChanged.metadata.exif.GpsDescriptor.java
com.drewChanged.metadata.exif.GpsDirectory.java
com.drewChanged.metadata.iptc.IptcDescriptor.java
com.drewChanged.metadata.iptc.IptcDirectory.java
com.drewChanged.metadata.iptc.IptcProcessingException.java
com.drewChanged.metadata.iptc.IptcReader.java
com.drewChanged.metadata.jpeg.JpegCommentDescriptor.java
com.drewChanged.metadata.jpeg.JpegCommentDirectory.java
com.drewChanged.metadata.jpeg.JpegCommentReader.java
com.drewChanged.metadata.jpeg.JpegComponent.java
com.drewChanged.metadata.jpeg.JpegDescriptor.java
com.drewChanged.metadata.jpeg.JpegDirectory.java
com.drewChanged.metadata.jpeg.JpegReader.java