You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2023/05/14 17:24:42 UTC
[commons-imaging] 01/02: Fix broken encapsulation for TiffDirectory.entries
This is an automated email from the ASF dual-hosted git repository.
ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-imaging.git
commit 4a37330a3d6af9650d61f7b531294113d8effe6d
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Sun May 14 13:20:00 2023 -0400
Fix broken encapsulation for TiffDirectory.entries
---
.../commons/imaging/formats/tiff/TiffContents.java | 3 +-
.../imaging/formats/tiff/TiffDirectory.java | 46 +++++++++++++---------
.../imaging/formats/tiff/TiffImageParser.java | 25 ++----------
3 files changed, 32 insertions(+), 42 deletions(-)
diff --git a/src/main/java/org/apache/commons/imaging/formats/tiff/TiffContents.java b/src/main/java/org/apache/commons/imaging/formats/tiff/TiffContents.java
index e87dbf47..c05b7630 100644
--- a/src/main/java/org/apache/commons/imaging/formats/tiff/TiffContents.java
+++ b/src/main/java/org/apache/commons/imaging/formats/tiff/TiffContents.java
@@ -83,8 +83,7 @@ public class TiffContents {
for (final TiffDirectory directory : directories) {
result.add(directory);
- final List<TiffField> fields = directory.entries;
- for (final TiffField field : fields) {
+ for (final TiffField field : directory) {
final TiffElement oversizeValue = field.getOversizeValueElement();
if (null != oversizeValue) {
result.add(oversizeValue);
diff --git a/src/main/java/org/apache/commons/imaging/formats/tiff/TiffDirectory.java b/src/main/java/org/apache/commons/imaging/formats/tiff/TiffDirectory.java
index 8374ee24..b7d2bc96 100644
--- a/src/main/java/org/apache/commons/imaging/formats/tiff/TiffDirectory.java
+++ b/src/main/java/org/apache/commons/imaging/formats/tiff/TiffDirectory.java
@@ -21,6 +21,7 @@ import java.io.IOException;
import java.nio.ByteOrder;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.Iterator;
import java.util.List;
import org.apache.commons.imaging.ImageReadException;
@@ -63,7 +64,8 @@ import org.apache.commons.imaging.formats.tiff.taginfos.TagInfoXpString;
* for individual images or sets of metadata. While not all Directories contain
* images, images are always stored in a Directory.
*/
-public class TiffDirectory extends TiffElement {
+public class TiffDirectory extends TiffElement implements Iterable<TiffField> {
+
public static final class ImageDataElement extends TiffElement {
public ImageDataElement(final long offset, final int length) {
super(offset, length);
@@ -74,6 +76,7 @@ public class TiffDirectory extends TiffElement {
return "ImageDataElement";
}
}
+
public static String description(final int type) {
switch (type) {
case TiffDirectoryConstants.DIRECTORY_TYPE_UNKNOWN:
@@ -94,19 +97,22 @@ public class TiffDirectory extends TiffElement {
return "Bad Type";
}
}
- public final int type;
- public final List<TiffField> entries;
- public final long nextDirectoryOffset;
- private TiffImageData tiffImageData;
+ private final List<TiffField> entries;
+ /**
+ * Preserves the byte order derived from the TIFF file header. Some of the legacy methods in this class require byte
+ * order as an argument, though that use could be phased out eventually.
+ */
+ private final ByteOrder headerByteOrder;
private JpegImageData jpegImageData;
- // Preservers the byte order derived from the TIFF file header.
- // Some of the legacy methods in this class require byte order as an
- // argument, though that use could be phased out eventually.
- private final ByteOrder headerByteOrder;
+ public final long nextDirectoryOffset;
+
+ private TiffImageData tiffImageData;
+
+ public final int type;
public TiffDirectory(
final int type,
@@ -132,7 +138,6 @@ public class TiffDirectory extends TiffElement {
for (final TiffField entry : entries) {
entry.dump();
}
-
}
@@ -143,10 +148,6 @@ public class TiffDirectory extends TiffElement {
public TiffField findField(final TagInfo tag, final boolean failIfMissing)
throws ImageReadException {
- if (entries == null) {
- return null;
- }
-
for (final TiffField field : entries) {
if (field.getTag() == tag.tag) {
return field;
@@ -852,10 +853,10 @@ public class TiffDirectory extends TiffElement {
final TiffField stripOffsets = findField(TiffTagConstants.TIFF_TAG_STRIP_OFFSETS);
final TiffField stripByteCounts = findField(TiffTagConstants.TIFF_TAG_STRIP_BYTE_COUNTS);
- if ((tileOffsets != null) && (tileByteCounts != null)) {
+ if (tileOffsets != null && tileByteCounts != null) {
return getRawImageDataElements(tileOffsets, tileByteCounts);
}
- if ((stripOffsets != null) && (stripByteCounts != null)) {
+ if (stripOffsets != null && stripByteCounts != null) {
return getRawImageDataElements(stripOffsets, stripByteCounts);
}
throw new ImageReadException("Couldn't find image data.");
@@ -924,15 +925,20 @@ public class TiffDirectory extends TiffElement {
final TiffField stripOffsets = findField(TiffTagConstants.TIFF_TAG_STRIP_OFFSETS);
final TiffField stripByteCounts = findField(TiffTagConstants.TIFF_TAG_STRIP_BYTE_COUNTS);
- if ((tileOffsets != null) && (tileByteCounts != null)) {
+ if (tileOffsets != null && tileByteCounts != null) {
return false;
}
- if ((stripOffsets != null) && (stripByteCounts != null)) {
+ if (stripOffsets != null && stripByteCounts != null) {
return true;
}
throw new ImageReadException("Couldn't find image data.");
}
+ @Override
+ public Iterator<TiffField> iterator() {
+ return entries.iterator();
+ }
+
public void setJpegImageData(final JpegImageData value) {
this.jpegImageData = value;
}
@@ -940,4 +946,8 @@ public class TiffDirectory extends TiffElement {
public void setTiffImageData(final TiffImageData rawImageData) {
this.tiffImageData = rawImageData;
}
+
+ public int size() {
+ return entries.size();
+ }
}
diff --git a/src/main/java/org/apache/commons/imaging/formats/tiff/TiffImageParser.java b/src/main/java/org/apache/commons/imaging/formats/tiff/TiffImageParser.java
index 6fdf7ff7..44c602a7 100644
--- a/src/main/java/org/apache/commons/imaging/formats/tiff/TiffImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/formats/tiff/TiffImageParser.java
@@ -137,15 +137,9 @@ public class TiffImageParser extends ImageParser<TiffImagingParameters> implemen
for (int d = 0; d < directories.size(); d++) {
final TiffDirectory directory = directories.get(d);
- final List<TiffField> entries = directory.entries;
-
- if (entries == null) {
- return false;
- }
-
// Debug.debug("directory offset", directory.offset);
- for (final TiffField field : entries) {
+ for (final TiffField field : directory) {
field.dump(pw, Integer.toString(d));
}
}
@@ -255,12 +249,6 @@ public class TiffImageParser extends ImageParser<TiffImagingParameters> implemen
protected BufferedImage getBufferedImage(final TiffDirectory directory,
final ByteOrder byteOrder, final TiffImagingParameters params)
throws ImageReadException, IOException {
- final List<TiffField> entries = directory.entries;
-
- if (entries == null) {
- throw new ImageReadException("TIFF missing entries");
- }
-
final short compressionFieldValue;
if (directory.findField(TiffTagConstants.TIFF_TAG_COMPRESSION) != null) {
compressionFieldValue = directory.getFieldValue(TiffTagConstants.TIFF_TAG_COMPRESSION);
@@ -521,9 +509,8 @@ public class TiffImageParser extends ImageParser<TiffImagingParameters> implemen
final int bitsPerPixel = bitsPerSample; // assume grayscale;
// dunno if this handles colormapped images correctly.
- final List<TiffField> entries = directory.entries;
- final List<String> comments = Allocator.arrayList(entries.size());
- for (final TiffField field : entries) {
+ final List<String> comments = Allocator.arrayList(directory.size());
+ for (final TiffField field : directory) {
final String comment = field.toString();
comments.add(comment);
}
@@ -759,12 +746,6 @@ public class TiffImageParser extends ImageParser<TiffImagingParameters> implemen
final ByteOrder byteOrder,
TiffImagingParameters params)
throws ImageReadException, IOException {
- final List<TiffField> entries = directory.entries;
-
- if (entries == null) {
- throw new ImageReadException("TIFF missing entries");
- }
-
if (params == null) {
params = this.getDefaultParameters();
}