You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Damjan Jovanovic (JIRA)" <ji...@apache.org> on 2014/10/19 09:23:33 UTC

[jira] [Resolved] (IMAGING-137) Can not set EXIF_TAG_EXIF_VERSION tag

     [ https://issues.apache.org/jira/browse/IMAGING-137?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Damjan Jovanovic resolved IMAGING-137.
--------------------------------------
       Resolution: Fixed
    Fix Version/s: 1.0

exifDirectory.add(ExifTagConstants.EXIF_TAG_EXIF_VERSION, 0, 2, 2, 1);
should work now. Resolving fixed.

> Can not set EXIF_TAG_EXIF_VERSION tag
> -------------------------------------
>
>                 Key: IMAGING-137
>                 URL: https://issues.apache.org/jira/browse/IMAGING-137
>             Project: Commons Imaging
>          Issue Type: Bug
>          Components: Format: TIFF
>    Affects Versions: 1.0
>         Environment: java 1.7.0_55  Commons-Imaging (build date is 3/25/2014)
>            Reporter: Ted Troccola
>              Labels: features
>             Fix For: 1.0
>
>
> I am unable to set EXIF_TAG_EXIF_VERSION.
> I am using Maven with the following settings (the build date is 3/25/2014):
> <dependency>
>       <groupId>org.apache.commons</groupId>
>       <artifactId>commons-imaging</artifactId>
>       <version>1.0-SNAPSHOT</version>
>       <scope>compile</scope>
>    </dependency>
>    <repository>
>       <id>apache.snapshots</id>
>       <url>http://repository.apache.org/snapshots/</url>
>    </repository>
> I get exceptions because it expects only 1 byte.
> If I debug and inspect the metadata for a JPG file with proper Exif data, it shows 4 bytes (48,50,50,48). This is consistent with this reference
> Here is my code. To run, change the file names and run.
> import java.io.BufferedOutputStream;
> import java.io.File;
> import java.io.FileOutputStream;
> import java.io.IOException;
> import java.io.OutputStream;
> import java.util.List;
> import org.apache.commons.imaging.ImageReadException;
> import org.apache.commons.imaging.ImageWriteException;
> import org.apache.commons.imaging.Imaging;
> import org.apache.commons.imaging.common.IImageMetadata;
> import org.apache.commons.imaging.common.IImageMetadata.IImageMetadataItem;
> import org.apache.commons.imaging.formats.jpeg.JpegImageMetadata;
> import org.apache.commons.imaging.formats.jpeg.exif.ExifRewriter;
> import org.apache.commons.imaging.formats.tiff.TiffImageMetadata;
> import org.apache.commons.imaging.formats.tiff.constants.ExifTagConstants;
> import org.apache.commons.imaging.formats.tiff.write.TiffOutputDirectory;
> import org.apache.commons.imaging.formats.tiff.write.TiffOutputSet;
> public class ExifExample
> {
>     public static void logImageMetaData(final File jpgImageFile) throws ImageReadException, IOException
>     {
>         // Get all metadata stored in Exif format (i.e., from JPEG or TIFF).
>         final IImageMetadata metadata = Imaging.getMetadata(jpgImageFile);
>         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);
>                 System.out.println("    "
>                         + "item: " + item);
>             }
>         }
>     }
>     private static TiffOutputSet getMetadata(final File jpegImageFile) throws ImageReadException, IOException, ImageWriteException
>     {
>         TiffOutputSet outputSet = null;
>         // metadata might be null if no metadata is found.
>         final IImageMetadata metadata = Imaging.getMetadata(jpegImageFile);
>         final JpegImageMetadata jpegMetadata = (JpegImageMetadata) metadata;
>         if (null != jpegMetadata)
>         {
>             // Exif might be null if no Exif metadata is found.
>             final TiffImageMetadata exif = jpegMetadata.getExif();
>             if (null != exif)
>             {
>                 /* TiffImageMetadata class is immutable (read-only).
>                  * TiffOutputSet class represents the Exif data to write.
>                  *
>                  * Usually, we want to update existing Exif metadata by changing
>                  * the values of a few fields, or adding a field.
>                  * 
>                  * In these cases, it is easiest to use getOutputSet() to
>                  * start with a "copy" of the fields read from the image.
>                  */
>                 outputSet = exif.getOutputSet();
>             }
>         }
>         return outputSet;
>     }
>     public static void writeExifData(File jpegImageFile, File destImageFile) throws IOException, ImageReadException, ImageWriteException
>     {
>         try (OutputStream os = new BufferedOutputStream(new FileOutputStream(destImageFile)))
>         {
>             TiffOutputSet outputSet = new TiffOutputSet();
>             // Create the Exif directory tags
>             final TiffOutputDirectory exifDirectory = outputSet.getOrCreateExifDirectory();
>             /*
>              * TODO: How do you set ExifVersion
>              * 
>              * Exception in thread "main" org.apache.commons.imaging.ImageWriteException: Tag expects 1 value(s), not 4
>                at org.apache.commons.imaging.formats.tiff.write.TiffOutputDirectory.add(TiffOutputDirectory.java:91)
>                at com.ttinc.util.exif.ExifExample.writeExifData(ExifExample.java:81)
>                at com.ttinc.util.exif.ExifExample.main(ExifExample.java:91)
>              */
>             exifDirectory.add(ExifTagConstants.EXIF_TAG_EXIF_VERSION, "0221".getBytes());
>             new ExifRewriter().updateExifMetadataLossless(jpegImageFile, os, outputSet);
>         }
>     }
>     public static void main(String args[]) throws Exception
>     {
>         File destinationImageFile = new File("C:\\temp\\DestImage.jpg");
>         writeExifData(new File("C:\\temp\\SourceImage.jpg"), destinationImageFile);
>         logImageMetaData(destinationImageFile);
>     }
> }



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)