You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Ted Troccola (JIRA)" <ji...@apache.org> on 2014/07/09 14:20:05 UTC
[jira] [Created] (IMAGING-137) Can not set EXIF_TAG_EXIF_VERSION
tag
Ted Troccola created IMAGING-137:
------------------------------------
Summary: 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
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.2#6252)