[
https://issues.apache.org/jira/browse/IMAGING-319?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17490983#comment-17490983
]
Gary Lucas edited comment on IMAGING-319 at 2/11/22, 4:09 PM:
--------------------------------------------------------------
I haven't figured this out yet, but I've narrowed down the cause to
TiffImageWriterLossless. There is a method that attempts to update the file
positions (offsets) of the various EXIF tags. It's called
updateOffsetsSteps().
The code is very confusing. As far as I can tell, at some point some of the
space in the output file is determined to be "unused" and updateOffsetSteps()
attempts to reuse it by finding available space and setting the tag output
position to the available space. If you bypass this operation by adding a
diagnostic call to unusedElements.clear() right after the unusedElements list
is established, everything works fine.
was (Author: gwlucas):
I haven't figured this out yet, but I've narrowed down the cause to
TiffImageWriterLossless. There is a method that attempts to update the file
positions (offsets) of the various EXIF tags. It's called
updateOffsetsSteps().
The code is very confusing. As far as I can tell, at some point some of the
space in the output file is determined to be "unused" and updateOffsetSteps()
attempts to reuse it by finding available space and setting the tag output
position to the available space. If you bypass this operation by adding a
diagnostic call to unusedElements.clear() right after the unusedElements list
is established, everything works fine.
The call stack is basically
ExifRewriter.updateExifMetadataLossles
ExifRewriter.writeExifSegment
TiffImageWriterLossless.write
TiffImageWriterLossless.updateOffsetsStep
> updateExifMetadataLossless lost the first character of a String
> ---------------------------------------------------------------
>
> Key: IMAGING-319
> URL: https://issues.apache.org/jira/browse/IMAGING-319
> Project: Commons Imaging
> Issue Type: Bug
> Components: Format: JPEG
> Affects Versions: 1.0-alpha2
> Reporter: Sicheng Yang
> Priority: Major
> Attachments: Screen Shot 2021-11-26 at 4.01.06 PM-1.png, Screen Shot
> 2021-11-26 at 4.01.21 PM-1.png, iPhone12-geotag.JPG
>
>
> I try to use TiffOutputSet to generate a new image. However, if a tag that
> contains String, the program may miss the first character of the String.
>
> import java.io.*;
> import org.apache.commons.imaging.ImageReadException;
> import org.apache.commons.imaging.ImageWriteException;
> import org.apache.commons.imaging.Imaging;
> import org.apache.commons.imaging.common.ImageMetadata;
> 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.write.TiffOutputSet;
> public class LibraryTest {
> public static void main(String[] args) throws ImageReadException,
> IOException, ImageWriteException {
> File source = new File("./assets/iPhone12-geotag.JPG");
> File result = new
> File("./assets/results/editted-iPhone12-geotag.JPG");
> final ImageMetadata metadata = Imaging.getMetadata(source);
> final JpegImageMetadata jpegMetadata = (JpegImageMetadata) metadata;
> final TiffImageMetadata exif = jpegMetadata.getExif();
> TiffOutputSet outputSet = exif.getOutputSet();
> BufferedOutputStream bufferedOutputStream = new
> BufferedOutputStream(new FileOutputStream(result));
> new ExifRewriter().updateExifMetadataLossless(source,
> bufferedOutputStream, outputSet);
> }
> }
>
> This is the sample code.
> Tag value in original image
> !image-2021-11-26-16-01-58-645.png!
> Tag value in output image
> !image-2021-11-26-16-04-12-185.png!
--
This message was sent by Atlassian Jira
(v8.20.1#820001)