1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.imaging.formats.jpeg.exif;
19
20 import static org.junit.jupiter.api.Assertions.assertTrue;
21
22 import java.io.File;
23 import java.nio.file.Files;
24 import java.util.stream.Stream;
25
26 import org.apache.commons.imaging.ImagingOverflowException;
27 import org.apache.commons.imaging.bytesource.ByteSource;
28 import org.apache.commons.imaging.examples.WriteExifMetadataExample;
29 import org.apache.commons.imaging.formats.jpeg.JpegImageParser;
30 import org.apache.commons.imaging.formats.tiff.TiffField;
31 import org.apache.commons.imaging.formats.tiff.TiffImageMetadata;
32 import org.apache.commons.imaging.internal.Debug;
33 import org.junit.jupiter.params.ParameterizedTest;
34 import org.junit.jupiter.params.provider.MethodSource;
35
36 public class WriteExifMetadataExampleTest extends AbstractExifTest {
37
38 public static Stream<File> data() throws Exception {
39 return getJpegImages().stream();
40 }
41
42
43
44
45
46
47 @ParameterizedTest
48 @MethodSource("data")
49 public void testOddOffsets(final File imageFile) throws Exception {
50 Debug.debug("imageFile", imageFile.getAbsoluteFile());
51
52 final File tempFile = Files.createTempFile("test", ".jpg").toFile();
53 Debug.debug("tempFile", tempFile.getAbsoluteFile());
54
55 try {
56 final boolean ignoreImageData = isPhilHarveyTestImage(imageFile);
57 if (ignoreImageData) {
58 return;
59 }
60 new WriteExifMetadataExample().changeExifMetadata(imageFile, tempFile);
61 final JpegImageParser parser = new JpegImageParser();
62 final ByteSource byteSource = ByteSource.file(tempFile);
63 final TiffImageMetadata tiff = parser.getExifMetadata(byteSource, null);
64 for (final TiffField tiffField : tiff.getAllFields()) {
65 if (!tiffField.isLocalValue()) {
66 final boolean isOdd = (tiffField.getOffset() & 1L) == 0;
67 assertTrue(isOdd);
68 }
69 }
70 } catch (final ImagingOverflowException e) {
71 Debug.debug("Ignoring unavoidable ExifOverflowException: " + e.getMessage());
72 Debug.debug("Error image: " + imageFile.getAbsoluteFile());
73 }
74 }
75
76 }