You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ki...@apache.org on 2022/01/16 02:03:04 UTC

[commons-imaging] 04/24: [IMAGING-159] Update code and parameters after reading tests and examples

This is an automated email from the ASF dual-hosted git repository.

kinow pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-imaging.git

commit 6f6e6e2a73ebf23a24bdb64bc56722a80d479ba1
Author: Bruno P. Kinoshita <ki...@apache.org>
AuthorDate: Fri Apr 23 11:32:09 2021 +1200

    [IMAGING-159] Update code and parameters after reading tests and examples
---
 .../java/org/apache/commons/imaging/Imaging.java   | 15 ++++----
 .../commons/imaging/common/XmpEmbeddable.java      |  5 ++-
 .../imaging/formats/bmp/BmpImagingParameters.java  |  8 ++++-
 .../imaging/formats/gif/GifImageParser.java        |  5 +--
 .../imaging/formats/gif/GifImagingParameters.java  |  4 +++
 .../formats/icns/IcnsImagingParameters.java        |  4 +++
 .../imaging/formats/ico/IcoImagingParameters.java  |  4 +++
 .../imaging/formats/jpeg/JpegImageParser.java      | 10 ++++--
 .../formats/jpeg/JpegImagingParameters.java        |  4 +++
 .../imaging/formats/pcx/PcxImagingParameters.java  |  5 +++
 .../imaging/formats/png/PngImageParser.java        |  5 +--
 .../imaging/formats/png/PngImagingParameters.java  | 13 ++++---
 .../commons/imaging/formats/png/PngWriter.java     |  2 +-
 .../imaging/formats/pnm/PnmImageParser.java        |  3 --
 .../imaging/formats/pnm/PnmImagingParameters.java  |  4 +++
 .../imaging/formats/psd/PsdImageParser.java        |  5 +--
 .../imaging/formats/psd/PsdImagingParameters.java  |  4 +++
 .../formats/rgbe/RgbeImagingParameters.java        |  4 +++
 .../imaging/formats/tiff/TiffImageParser.java      | 41 +++++++++++++---------
 .../formats/tiff/TiffImagingParameters.java        |  5 +++
 .../commons/imaging/formats/tiff/TiffReader.java   | 13 +++----
 .../formats/wbmp/WbmpImagingParameters.java        |  4 +++
 .../imaging/formats/xbm/XbmImagingParameters.java  |  4 +++
 .../imaging/formats/xpm/XpmImagingParameters.java  |  9 ++++-
 24 files changed, 126 insertions(+), 54 deletions(-)

diff --git a/src/main/java/org/apache/commons/imaging/Imaging.java b/src/main/java/org/apache/commons/imaging/Imaging.java
index 4fbea0d..83f81c7 100644
--- a/src/main/java/org/apache/commons/imaging/Imaging.java
+++ b/src/main/java/org/apache/commons/imaging/Imaging.java
@@ -32,6 +32,7 @@ import java.util.Objects;
 
 import org.apache.commons.imaging.common.ImageMetadata;
 import org.apache.commons.imaging.common.XmpEmbeddable;
+import org.apache.commons.imaging.common.XmpImagingParameters;
 import org.apache.commons.imaging.common.bytesource.ByteSource;
 import org.apache.commons.imaging.common.bytesource.ByteSourceArray;
 import org.apache.commons.imaging.common.bytesource.ByteSourceFile;
@@ -890,7 +891,7 @@ public final class Imaging {
      * @throws ImageReadException if it fails to parse the image
      * @throws IOException if it fails to read the image data
      */
-    public static String getXmpXml(final InputStream is, final String fileName, final ImagingParameters params)
+    public static String getXmpXml(final InputStream is, final String fileName, final XmpImagingParameters params)
             throws ImageReadException, IOException {
         return getXmpXml(new ByteSourceInputStream(is, fileName), params);
     }
@@ -921,7 +922,7 @@ public final class Imaging {
      * @throws ImageReadException if it fails to parse the image
      * @throws IOException if it fails to read the image data
      */
-    public static String getXmpXml(final byte[] bytes, final ImagingParameters params)
+    public static String getXmpXml(final byte[] bytes, final XmpImagingParameters params)
             throws ImageReadException, IOException {
         return getXmpXml(new ByteSourceArray(bytes), params);
     }
@@ -938,7 +939,7 @@ public final class Imaging {
      */
     public static String getXmpXml(final File file) throws ImageReadException,
             IOException {
-        return getXmpXml(file, null);
+        return getXmpXml(file, new XmpImagingParameters());
     }
 
     /**
@@ -952,7 +953,7 @@ public final class Imaging {
      * @throws ImageReadException if it fails to parse the image
      * @throws IOException if it fails to read the image data
      */
-    public static String getXmpXml(final File file, final ImagingParameters params)
+    public static String getXmpXml(final File file, final XmpImagingParameters params)
             throws ImageReadException, IOException {
         return getXmpXml(new ByteSourceFile(file), params);
     }
@@ -968,9 +969,7 @@ public final class Imaging {
      * @throws ImageReadException if it fails to parse the image
      * @throws IOException if it fails to read the image data
      */
-    // TODO: we have no way of knowing whether getImageParser will return a parser that is compatible with the ImagingParameters instance given
-    @SuppressWarnings({ "unchecked", "rawtypes" })
-	public static String getXmpXml(final ByteSource byteSource, final ImagingParameters params)
+	public static String getXmpXml(final ByteSource byteSource, final XmpImagingParameters params)
             throws ImageReadException, IOException {
         final ImageParser<?> imageParser = getImageParser(byteSource);
         if (imageParser instanceof XmpEmbeddable) {
@@ -1324,7 +1323,7 @@ public final class Imaging {
      */
     public static BufferedImage getBufferedImage(final InputStream is, final ImagingParameters params)
             throws ImageReadException, IOException {
-        String fileName = params != null ? "" : null;
+        String fileName = params != null ? params.getFileName() : null;
         return getBufferedImage(new ByteSourceInputStream(is, fileName), params);
     }
 
diff --git a/src/main/java/org/apache/commons/imaging/common/XmpEmbeddable.java b/src/main/java/org/apache/commons/imaging/common/XmpEmbeddable.java
index 12af31f..731f8b2 100644
--- a/src/main/java/org/apache/commons/imaging/common/XmpEmbeddable.java
+++ b/src/main/java/org/apache/commons/imaging/common/XmpEmbeddable.java
@@ -19,7 +19,6 @@ package org.apache.commons.imaging.common;
 import java.io.IOException;
 
 import org.apache.commons.imaging.ImageReadException;
-import org.apache.commons.imaging.ImagingParameters;
 import org.apache.commons.imaging.common.bytesource.ByteSource;
 
 /**
@@ -29,7 +28,7 @@ import org.apache.commons.imaging.common.bytesource.ByteSource;
  * @see <a href="https://en.wikipedia.org/wiki/Extensible_Metadata_Platform">https://en.wikipedia.org/wiki/Extensible_Metadata_Platform</a>
  * @since 1.0
  */
-public interface XmpEmbeddable<T extends ImagingParameters> {
+public interface XmpEmbeddable {
 
     /**
      * Get a string containing XML-formatted text conforming to the Extensible
@@ -48,7 +47,7 @@ public interface XmpEmbeddable<T extends ImagingParameters> {
      *                            parser implementation.
      * @throws IOException        In the event of unsuccessful read or access operation.
      */
-    String getXmpXml(ByteSource byteSource, T params)
+    String getXmpXml(ByteSource byteSource, XmpImagingParameters params)
             throws ImageReadException, IOException;
 
 }
diff --git a/src/main/java/org/apache/commons/imaging/formats/bmp/BmpImagingParameters.java b/src/main/java/org/apache/commons/imaging/formats/bmp/BmpImagingParameters.java
index 73cc803..cf19e8e 100644
--- a/src/main/java/org/apache/commons/imaging/formats/bmp/BmpImagingParameters.java
+++ b/src/main/java/org/apache/commons/imaging/formats/bmp/BmpImagingParameters.java
@@ -17,10 +17,16 @@
 
 package org.apache.commons.imaging.formats.bmp;
 
+import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImagingParameters;
 
 /**
  * Bmp format parameters.
  * @since 1.0-alpha3
  */
-public class BmpImagingParameters extends ImagingParameters {}
+public class BmpImagingParameters extends ImagingParameters {
+
+    public BmpImagingParameters() {
+        setImageFormat(ImageFormats.BMP);
+    }
+}
diff --git a/src/main/java/org/apache/commons/imaging/formats/gif/GifImageParser.java b/src/main/java/org/apache/commons/imaging/formats/gif/GifImageParser.java
index 2da2527..92c4d03 100644
--- a/src/main/java/org/apache/commons/imaging/formats/gif/GifImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/formats/gif/GifImageParser.java
@@ -48,13 +48,14 @@ import org.apache.commons.imaging.common.BinaryOutputStream;
 import org.apache.commons.imaging.common.ImageBuilder;
 import org.apache.commons.imaging.common.ImageMetadata;
 import org.apache.commons.imaging.common.XmpEmbeddable;
+import org.apache.commons.imaging.common.XmpImagingParameters;
 import org.apache.commons.imaging.common.bytesource.ByteSource;
 import org.apache.commons.imaging.common.mylzw.MyLzwCompressor;
 import org.apache.commons.imaging.common.mylzw.MyLzwDecompressor;
 import org.apache.commons.imaging.palette.Palette;
 import org.apache.commons.imaging.palette.PaletteFactory;
 
-public class GifImageParser extends ImageParser<GifImagingParameters> implements XmpEmbeddable<GifImagingParameters> {
+public class GifImageParser extends ImageParser<GifImagingParameters> implements XmpEmbeddable {
 
     private static final Logger LOGGER = Logger.getLogger(GifImageParser.class.getName());
 
@@ -1068,7 +1069,7 @@ public class GifImageParser extends ImageParser<GifImagingParameters> implements
      * @return Xmp Xml as String, if present. Otherwise, returns null.
      */
     @Override
-    public String getXmpXml(final ByteSource byteSource, final GifImagingParameters params)
+    public String getXmpXml(final ByteSource byteSource, final XmpImagingParameters params)
             throws ImageReadException, IOException {
         try (InputStream is = byteSource.getInputStream()) {
             final GifHeaderInfo ghi = readHeader(is, null);
diff --git a/src/main/java/org/apache/commons/imaging/formats/gif/GifImagingParameters.java b/src/main/java/org/apache/commons/imaging/formats/gif/GifImagingParameters.java
index 2e50660..fa8007c 100644
--- a/src/main/java/org/apache/commons/imaging/formats/gif/GifImagingParameters.java
+++ b/src/main/java/org/apache/commons/imaging/formats/gif/GifImagingParameters.java
@@ -17,6 +17,7 @@
 
 package org.apache.commons.imaging.formats.gif;
 
+import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.common.XmpImagingParameters;
 
 /**
@@ -25,4 +26,7 @@ import org.apache.commons.imaging.common.XmpImagingParameters;
  */
 public class GifImagingParameters extends XmpImagingParameters {
 
+    public GifImagingParameters() {
+        setImageFormat(ImageFormats.GIF);
+    }
 }
diff --git a/src/main/java/org/apache/commons/imaging/formats/icns/IcnsImagingParameters.java b/src/main/java/org/apache/commons/imaging/formats/icns/IcnsImagingParameters.java
index bbfd8c8..1d83839 100644
--- a/src/main/java/org/apache/commons/imaging/formats/icns/IcnsImagingParameters.java
+++ b/src/main/java/org/apache/commons/imaging/formats/icns/IcnsImagingParameters.java
@@ -15,6 +15,7 @@
 
 package org.apache.commons.imaging.formats.icns;
 
+import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImagingParameters;
 
 /**
@@ -23,4 +24,7 @@ import org.apache.commons.imaging.ImagingParameters;
  */
 public class IcnsImagingParameters extends ImagingParameters {
 
+    public IcnsImagingParameters() {
+        setImageFormat(ImageFormats.ICNS);
+    }
 }
diff --git a/src/main/java/org/apache/commons/imaging/formats/ico/IcoImagingParameters.java b/src/main/java/org/apache/commons/imaging/formats/ico/IcoImagingParameters.java
index d686bce..ed86d9c 100644
--- a/src/main/java/org/apache/commons/imaging/formats/ico/IcoImagingParameters.java
+++ b/src/main/java/org/apache/commons/imaging/formats/ico/IcoImagingParameters.java
@@ -15,6 +15,7 @@
 
 package org.apache.commons.imaging.formats.ico;
 
+import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImagingParameters;
 
 /**
@@ -23,4 +24,7 @@ import org.apache.commons.imaging.ImagingParameters;
  */
 public class IcoImagingParameters extends ImagingParameters {
 
+    public IcoImagingParameters () {
+        setImageFormat(ImageFormats.ICO);
+    }
 }
diff --git a/src/main/java/org/apache/commons/imaging/formats/jpeg/JpegImageParser.java b/src/main/java/org/apache/commons/imaging/formats/jpeg/JpegImageParser.java
index 216e0eb..e4bb582 100644
--- a/src/main/java/org/apache/commons/imaging/formats/jpeg/JpegImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/formats/jpeg/JpegImageParser.java
@@ -40,6 +40,7 @@ import org.apache.commons.imaging.ImageParser;
 import org.apache.commons.imaging.ImageReadException;
 import org.apache.commons.imaging.common.ImageMetadata;
 import org.apache.commons.imaging.common.XmpEmbeddable;
+import org.apache.commons.imaging.common.XmpImagingParameters;
 import org.apache.commons.imaging.common.bytesource.ByteSource;
 import org.apache.commons.imaging.formats.jpeg.decoder.JpegDecoder;
 import org.apache.commons.imaging.formats.jpeg.iptc.IptcParser;
@@ -61,7 +62,7 @@ import org.apache.commons.imaging.formats.tiff.TiffImageParser;
 import org.apache.commons.imaging.formats.tiff.constants.TiffTagConstants;
 import org.apache.commons.imaging.internal.Debug;
 
-public class JpegImageParser extends ImageParser<JpegImagingParameters> implements XmpEmbeddable<JpegImagingParameters> {
+public class JpegImageParser extends ImageParser<JpegImagingParameters> implements XmpEmbeddable {
 
     private static final Logger LOGGER = Logger.getLogger(JpegImageParser.class.getName());
 
@@ -317,8 +318,11 @@ public class JpegImageParser extends ImageParser<JpegImagingParameters> implemen
     }
 
     @Override
-    public ImageMetadata getMetadata(final ByteSource byteSource, final JpegImagingParameters params)
+    public ImageMetadata getMetadata(final ByteSource byteSource, JpegImagingParameters params)
             throws ImageReadException, IOException {
+        if (params == null) {
+            params = new JpegImagingParameters();
+        }
         final TiffImageMetadata exif = getExifMetadata(byteSource, params);
 
         final JpegPhotoshopMetadata photoshop = getPhotoshopMetadata(byteSource,
@@ -534,7 +538,7 @@ public class JpegImageParser extends ImageParser<JpegImagingParameters> implemen
      * @return Xmp Xml as String, if present. Otherwise, returns null.
      */
     @Override
-    public String getXmpXml(final ByteSource byteSource, final JpegImagingParameters params)
+    public String getXmpXml(final ByteSource byteSource, final XmpImagingParameters params)
             throws ImageReadException, IOException {
 
         final List<String> result = new ArrayList<>();
diff --git a/src/main/java/org/apache/commons/imaging/formats/jpeg/JpegImagingParameters.java b/src/main/java/org/apache/commons/imaging/formats/jpeg/JpegImagingParameters.java
index d2083f3..fff58f3 100644
--- a/src/main/java/org/apache/commons/imaging/formats/jpeg/JpegImagingParameters.java
+++ b/src/main/java/org/apache/commons/imaging/formats/jpeg/JpegImagingParameters.java
@@ -15,6 +15,7 @@
 
 package org.apache.commons.imaging.formats.jpeg;
 
+import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.formats.tiff.TiffImagingParameters;
 
 /**
@@ -23,4 +24,7 @@ import org.apache.commons.imaging.formats.tiff.TiffImagingParameters;
  */
 public class JpegImagingParameters extends TiffImagingParameters {
 
+    public JpegImagingParameters() {
+        setImageFormat(ImageFormats.JPEG);
+    }
 }
diff --git a/src/main/java/org/apache/commons/imaging/formats/pcx/PcxImagingParameters.java b/src/main/java/org/apache/commons/imaging/formats/pcx/PcxImagingParameters.java
index 4fdfa6f..ed19523 100644
--- a/src/main/java/org/apache/commons/imaging/formats/pcx/PcxImagingParameters.java
+++ b/src/main/java/org/apache/commons/imaging/formats/pcx/PcxImagingParameters.java
@@ -15,6 +15,7 @@
 
 package org.apache.commons.imaging.formats.pcx;
 
+import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImagingParameters;
 
 /**
@@ -27,6 +28,10 @@ public class PcxImagingParameters extends ImagingParameters {
     private int bitDepth = -1;
     private int compression = PcxConstants.PCX_COMPRESSION_UNCOMPRESSED;
 
+    public PcxImagingParameters() {
+        setImageFormat(ImageFormats.PCX);
+    }
+
     public int getPlanes() {
         return planes;
     }
diff --git a/src/main/java/org/apache/commons/imaging/formats/png/PngImageParser.java b/src/main/java/org/apache/commons/imaging/formats/png/PngImageParser.java
index 67bd8a5..1632ecc 100644
--- a/src/main/java/org/apache/commons/imaging/formats/png/PngImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/formats/png/PngImageParser.java
@@ -50,6 +50,7 @@ import org.apache.commons.imaging.ImageWriteException;
 import org.apache.commons.imaging.common.GenericImageMetadata;
 import org.apache.commons.imaging.common.ImageMetadata;
 import org.apache.commons.imaging.common.XmpEmbeddable;
+import org.apache.commons.imaging.common.XmpImagingParameters;
 import org.apache.commons.imaging.common.bytesource.ByteSource;
 import org.apache.commons.imaging.formats.png.chunks.PngChunk;
 import org.apache.commons.imaging.formats.png.chunks.PngChunkGama;
@@ -69,7 +70,7 @@ import org.apache.commons.imaging.formats.png.transparencyfilters.TransparencyFi
 import org.apache.commons.imaging.formats.png.transparencyfilters.TransparencyFilterTrueColor;
 import org.apache.commons.imaging.icc.IccProfileParser;
 
-public class PngImageParser extends ImageParser<PngImagingParameters>  implements XmpEmbeddable<PngImagingParameters> {
+public class PngImageParser extends ImageParser<PngImagingParameters>  implements XmpEmbeddable {
 
     private static final Logger LOGGER = Logger.getLogger(PngImageParser.class.getName());
 
@@ -703,7 +704,7 @@ public class PngImageParser extends ImageParser<PngImagingParameters>  implement
     }
 
     @Override
-    public String getXmpXml(final ByteSource byteSource, final PngImagingParameters params)
+    public String getXmpXml(final ByteSource byteSource, final XmpImagingParameters params)
             throws ImageReadException, IOException {
 
         final List<PngChunk> chunks = readChunks(byteSource, new ChunkType[] { ChunkType.iTXt }, false);
diff --git a/src/main/java/org/apache/commons/imaging/formats/png/PngImagingParameters.java b/src/main/java/org/apache/commons/imaging/formats/png/PngImagingParameters.java
index 3fdcc07..5c462b1 100644
--- a/src/main/java/org/apache/commons/imaging/formats/png/PngImagingParameters.java
+++ b/src/main/java/org/apache/commons/imaging/formats/png/PngImagingParameters.java
@@ -18,6 +18,7 @@ package org.apache.commons.imaging.formats.png;
 import java.util.Collections;
 import java.util.List;
 
+import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.common.XmpImagingParameters;
 
 /**
@@ -51,7 +52,11 @@ public class PngImagingParameters extends XmpImagingParameters {
      *
      * <p>Valid values: a list of WriteTexts.</p>
      */
-	private List<PngText> textChunks = null;
+	private List<? extends PngText> textChunks = null;
+
+	public PngImagingParameters() {
+	    setImageFormat(ImageFormats.PNG);
+	}
 
 	public byte getBitDepth() {
 		return bitDepth;
@@ -85,11 +90,11 @@ public class PngImagingParameters extends XmpImagingParameters {
 		this.physicalScale = physicalScale;
 	}
 
-	public List<PngText> getTextChunks() {
-		return Collections.unmodifiableList(textChunks);
+	public List<? extends PngText> getTextChunks() {
+		return textChunks != null ? Collections.unmodifiableList(textChunks) : null;
 	}
 
-	public void setTextChunks(List<PngText> textChunks) {
+	public void setTextChunks(List<? extends PngText> textChunks) {
 		this.textChunks = textChunks;
 	}
 }
diff --git a/src/main/java/org/apache/commons/imaging/formats/png/PngWriter.java b/src/main/java/org/apache/commons/imaging/formats/png/PngWriter.java
index ca32993..a2dac83 100644
--- a/src/main/java/org/apache/commons/imaging/formats/png/PngWriter.java
+++ b/src/main/java/org/apache/commons/imaging/formats/png/PngWriter.java
@@ -441,7 +441,7 @@ class PngWriter {
             writeChunkXmpiTXt(os, xmpXml);
         }
 
-        final List<PngText> outputTexts = params.getTextChunks();
+        final List<? extends PngText> outputTexts = params.getTextChunks();
         if (outputTexts != null) {
             for (final PngText text : outputTexts) {
                 if (text instanceof PngText.Text) {
diff --git a/src/main/java/org/apache/commons/imaging/formats/pnm/PnmImageParser.java b/src/main/java/org/apache/commons/imaging/formats/pnm/PnmImageParser.java
index 5dc2577..c51f581 100644
--- a/src/main/java/org/apache/commons/imaging/formats/pnm/PnmImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/formats/pnm/PnmImageParser.java
@@ -44,9 +44,6 @@ public class PnmImageParser extends ImageParser<PnmImagingParameters> {
     private static final String DEFAULT_EXTENSION = ".pnm";
     private static final String[] ACCEPTED_EXTENSIONS = { ".pbm", ".pgm",
             ".ppm", ".pnm", ".pam" };
-    public static final String PARAM_KEY_PNM_RAWBITS = "PNM_RAWBITS";
-    public static final String PARAM_VALUE_PNM_RAWBITS_YES = "YES";
-    public static final String PARAM_VALUE_PNM_RAWBITS_NO = "NO";
 
     public PnmImageParser() {
         super.setByteOrder(ByteOrder.LITTLE_ENDIAN);
diff --git a/src/main/java/org/apache/commons/imaging/formats/pnm/PnmImagingParameters.java b/src/main/java/org/apache/commons/imaging/formats/pnm/PnmImagingParameters.java
index 68f1e7c..927855e 100644
--- a/src/main/java/org/apache/commons/imaging/formats/pnm/PnmImagingParameters.java
+++ b/src/main/java/org/apache/commons/imaging/formats/pnm/PnmImagingParameters.java
@@ -31,6 +31,10 @@ public class PnmImagingParameters extends ImagingParameters {
      */
     private ImageFormats subtype = null;
 
+    public PnmImagingParameters() {
+        setImageFormat(ImageFormats.PNM);
+    }
+
     public boolean isRawBits() {
         return rawBits;
     }
diff --git a/src/main/java/org/apache/commons/imaging/formats/psd/PsdImageParser.java b/src/main/java/org/apache/commons/imaging/formats/psd/PsdImageParser.java
index 56c439d..8267470 100644
--- a/src/main/java/org/apache/commons/imaging/formats/psd/PsdImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/formats/psd/PsdImageParser.java
@@ -41,6 +41,7 @@ import org.apache.commons.imaging.ImageParser;
 import org.apache.commons.imaging.ImageReadException;
 import org.apache.commons.imaging.common.ImageMetadata;
 import org.apache.commons.imaging.common.XmpEmbeddable;
+import org.apache.commons.imaging.common.XmpImagingParameters;
 import org.apache.commons.imaging.common.bytesource.ByteSource;
 import org.apache.commons.imaging.formats.psd.dataparsers.DataParser;
 import org.apache.commons.imaging.formats.psd.dataparsers.DataParserBitmap;
@@ -53,7 +54,7 @@ import org.apache.commons.imaging.formats.psd.datareaders.CompressedDataReader;
 import org.apache.commons.imaging.formats.psd.datareaders.DataReader;
 import org.apache.commons.imaging.formats.psd.datareaders.UncompressedDataReader;
 
-public class PsdImageParser extends ImageParser<PsdImagingParameters> implements XmpEmbeddable<PsdImagingParameters> {
+public class PsdImageParser extends ImageParser<PsdImagingParameters> implements XmpEmbeddable {
     private static final String DEFAULT_EXTENSION = ".psd";
     private static final String[] ACCEPTED_EXTENSIONS = { DEFAULT_EXTENSION, };
     private static final int PSD_SECTION_HEADER = 0;
@@ -656,7 +657,7 @@ public class PsdImageParser extends ImageParser<PsdImagingParameters> implements
      * @return Xmp Xml as String, if present. Otherwise, returns null.
      */
     @Override
-    public String getXmpXml(final ByteSource byteSource, final PsdImagingParameters params)
+    public String getXmpXml(final ByteSource byteSource, final XmpImagingParameters params)
             throws ImageReadException, IOException {
 
         final PsdImageContents imageContents = readImageContents(byteSource);
diff --git a/src/main/java/org/apache/commons/imaging/formats/psd/PsdImagingParameters.java b/src/main/java/org/apache/commons/imaging/formats/psd/PsdImagingParameters.java
index 306069f..761892a 100644
--- a/src/main/java/org/apache/commons/imaging/formats/psd/PsdImagingParameters.java
+++ b/src/main/java/org/apache/commons/imaging/formats/psd/PsdImagingParameters.java
@@ -17,6 +17,7 @@
 
 package org.apache.commons.imaging.formats.psd;
 
+import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImagingParameters;
 
 /**
@@ -25,4 +26,7 @@ import org.apache.commons.imaging.ImagingParameters;
  */
 public class PsdImagingParameters extends ImagingParameters {
 
+    public PsdImagingParameters() {
+        setImageFormat(ImageFormats.PSD);
+    }
 }
diff --git a/src/main/java/org/apache/commons/imaging/formats/rgbe/RgbeImagingParameters.java b/src/main/java/org/apache/commons/imaging/formats/rgbe/RgbeImagingParameters.java
index 9d1f6eb..3575820 100644
--- a/src/main/java/org/apache/commons/imaging/formats/rgbe/RgbeImagingParameters.java
+++ b/src/main/java/org/apache/commons/imaging/formats/rgbe/RgbeImagingParameters.java
@@ -15,6 +15,7 @@
 
 package org.apache.commons.imaging.formats.rgbe;
 
+import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImagingParameters;
 
 /**
@@ -23,4 +24,7 @@ import org.apache.commons.imaging.ImagingParameters;
  */
 public class RgbeImagingParameters extends ImagingParameters {
 
+    public RgbeImagingParameters() {
+        setImageFormat(ImageFormats.RGBE);
+    }
 }
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 308362a..ee2c7f4 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
@@ -47,6 +47,7 @@ import org.apache.commons.imaging.ImageWriteException;
 import org.apache.commons.imaging.common.ImageBuilder;
 import org.apache.commons.imaging.common.ImageMetadata;
 import org.apache.commons.imaging.common.XmpEmbeddable;
+import org.apache.commons.imaging.common.XmpImagingParameters;
 import org.apache.commons.imaging.common.bytesource.ByteSource;
 import org.apache.commons.imaging.formats.tiff.TiffDirectory.ImageDataElement;
 import org.apache.commons.imaging.formats.tiff.constants.TiffEpTagConstants;
@@ -63,7 +64,7 @@ import org.apache.commons.imaging.formats.tiff.photometricinterpreters.Photometr
 import org.apache.commons.imaging.formats.tiff.photometricinterpreters.PhotometricInterpreterYCbCr;
 import org.apache.commons.imaging.formats.tiff.write.TiffImageWriterLossy;
 
-public class TiffImageParser extends ImageParser<TiffImagingParameters> implements XmpEmbeddable<TiffImagingParameters> {
+public class TiffImageParser extends ImageParser<TiffImagingParameters> implements XmpEmbeddable {
     private static final String DEFAULT_EXTENSION = ".tif";
     private static final String[] ACCEPTED_EXTENSIONS = { ".tif", ".tiff", };
 
@@ -91,9 +92,10 @@ public class TiffImageParser extends ImageParser<TiffImagingParameters> implemen
     @Override
     public byte[] getICCProfileBytes(final ByteSource byteSource, final TiffImagingParameters params)
             throws ImageReadException, IOException {
+        
         final FormatCompliance formatCompliance = FormatCompliance.getDefault();
-        final TiffContents contents = new TiffReader(isStrict(params)).readFirstDirectory(
-                byteSource, params, false, formatCompliance);
+        final TiffContents contents = new TiffReader(params != null ? params.isStrict() : false).readFirstDirectory(
+                byteSource, false, formatCompliance);
         final TiffDirectory directory = contents.directories.get(0);
 
         return directory.getFieldValue(TiffEpTagConstants.EXIF_TAG_INTER_COLOR_PROFILE,
@@ -104,8 +106,8 @@ public class TiffImageParser extends ImageParser<TiffImagingParameters> implemen
     public Dimension getImageSize(final ByteSource byteSource, final TiffImagingParameters params)
             throws ImageReadException, IOException {
         final FormatCompliance formatCompliance = FormatCompliance.getDefault();
-        final TiffContents contents = new TiffReader(isStrict(params)).readFirstDirectory(
-                byteSource, params, false, formatCompliance);
+        final TiffContents contents = new TiffReader(params != null ? params.isStrict() : false)
+                .readFirstDirectory(byteSource, false, formatCompliance);
         final TiffDirectory directory = contents.directories.get(0);
 
         final TiffField widthField = directory.findField(
@@ -124,12 +126,14 @@ public class TiffImageParser extends ImageParser<TiffImagingParameters> implemen
     }
 
     @Override
-    public ImageMetadata getMetadata(final ByteSource byteSource, final TiffImagingParameters params)
+    public ImageMetadata getMetadata(final ByteSource byteSource, TiffImagingParameters params)
             throws ImageReadException, IOException {
+        if (params == null) {
+            params = new TiffImagingParameters();
+        }
         final FormatCompliance formatCompliance = FormatCompliance.getDefault();
         final TiffReader tiffReader = new TiffReader(params.isStrict());
-        final TiffContents contents = tiffReader.readContents(byteSource, params,
-                formatCompliance);
+        final TiffContents contents = tiffReader.readContents(byteSource, params, formatCompliance);
 
         final List<TiffDirectory> directories = contents.directories;
 
@@ -155,7 +159,7 @@ public class TiffImageParser extends ImageParser<TiffImagingParameters> implemen
     public ImageInfo getImageInfo(final ByteSource byteSource, final TiffImagingParameters params)
             throws ImageReadException, IOException {
         final FormatCompliance formatCompliance = FormatCompliance.getDefault();
-        final TiffContents contents = new TiffReader(isStrict(params)).readDirectories(
+        final TiffContents contents = new TiffReader(params != null ? params.isStrict() : false).readDirectories(
                 byteSource, false, formatCompliance);
         final TiffDirectory directory = contents.directories.get(0);
 
@@ -309,7 +313,7 @@ public class TiffImageParser extends ImageParser<TiffImagingParameters> implemen
     }
 
     @Override
-    public String getXmpXml(final ByteSource byteSource, final TiffImagingParameters params)
+    public String getXmpXml(final ByteSource byteSource, final XmpImagingParameters params)
             throws ImageReadException, IOException {
         final FormatCompliance formatCompliance = FormatCompliance.getDefault();
         final TiffContents contents = new TiffReader(isStrict(params)).readDirectories(
@@ -396,7 +400,7 @@ public class TiffImageParser extends ImageParser<TiffImagingParameters> implemen
     public List<byte[]> collectRawImageData(final ByteSource byteSource, final TiffImagingParameters params)
             throws ImageReadException, IOException {
         final FormatCompliance formatCompliance = FormatCompliance.getDefault();
-        final TiffContents contents = new TiffReader(params.isStrict()).readDirectories(
+        final TiffContents contents = new TiffReader(params != null ? params.isStrict() : false).readDirectories(
                 byteSource, true, formatCompliance);
 
         final List<byte[]> result = new ArrayList<>();
@@ -452,12 +456,14 @@ public class TiffImageParser extends ImageParser<TiffImagingParameters> implemen
      * access operation.
      */
     @Override
-    public BufferedImage getBufferedImage(final ByteSource byteSource, final TiffImagingParameters params)
+    public BufferedImage getBufferedImage(final ByteSource byteSource, TiffImagingParameters params)
             throws ImageReadException, IOException {
+        if (params == null) {
+            params = new TiffImagingParameters();
+        }
         final FormatCompliance formatCompliance = FormatCompliance.getDefault();
-        final TiffReader reader = new TiffReader(isStrict(params));
-        final TiffContents contents = reader.readFirstDirectory(byteSource, params,
-                true, formatCompliance);
+        final TiffReader reader = new TiffReader(params.isStrict());
+        final TiffContents contents = reader.readFirstDirectory(byteSource, true, formatCompliance);
         final ByteOrder byteOrder = reader.getByteOrder();
         final TiffDirectory directory = contents.directories.get(0);
         final BufferedImage result = directory.getTiffImage(byteOrder, params);
@@ -751,8 +757,11 @@ public class TiffImageParser extends ImageParser<TiffImagingParameters> implemen
     }
 
     @Override
-    public void writeImage(final BufferedImage src, final OutputStream os, final TiffImagingParameters params)
+    public void writeImage(final BufferedImage src, final OutputStream os, TiffImagingParameters params)
             throws ImageWriteException, IOException {
+        if (params == null) {
+            params = new TiffImagingParameters();
+        }
         new TiffImageWriterLossy().writeImage(src, os, params);
     }
 
diff --git a/src/main/java/org/apache/commons/imaging/formats/tiff/TiffImagingParameters.java b/src/main/java/org/apache/commons/imaging/formats/tiff/TiffImagingParameters.java
index b61bfde..54c0047 100644
--- a/src/main/java/org/apache/commons/imaging/formats/tiff/TiffImagingParameters.java
+++ b/src/main/java/org/apache/commons/imaging/formats/tiff/TiffImagingParameters.java
@@ -15,6 +15,7 @@
 
 package org.apache.commons.imaging.formats.tiff;
 
+import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.common.XmpImagingParameters;
 import org.apache.commons.imaging.formats.tiff.photometricinterpreters.PhotometricInterpreter;
 import org.apache.commons.imaging.formats.tiff.write.TiffOutputSet;
@@ -98,6 +99,10 @@ public class TiffImagingParameters extends XmpImagingParameters {
      */
 	private Integer t6Options = null;
 
+	public TiffImagingParameters() {
+	    setImageFormat(ImageFormats.TIFF);
+	}
+
 	public boolean isReadThumbnails() {
 		return readThumbnails;
 	}
diff --git a/src/main/java/org/apache/commons/imaging/formats/tiff/TiffReader.java b/src/main/java/org/apache/commons/imaging/formats/tiff/TiffReader.java
index b312032..8bca029 100644
--- a/src/main/java/org/apache/commons/imaging/formats/tiff/TiffReader.java
+++ b/src/main/java/org/apache/commons/imaging/formats/tiff/TiffReader.java
@@ -288,7 +288,7 @@ public class TiffReader extends BinaryFileParser {
         private final boolean readThumbnails;
 
         Collector() {
-            this(null);
+            this(new TiffImagingParameters());
         }
 
         Collector(final TiffImagingParameters params) {
@@ -367,11 +367,10 @@ public class TiffReader extends BinaryFileParser {
 //        }
 //    }
 
-    public TiffContents readFirstDirectory(final ByteSource byteSource, final TiffImagingParameters params,
-            final boolean readImageData, final FormatCompliance formatCompliance)
+    public TiffContents readFirstDirectory(final ByteSource byteSource, final boolean readImageData, final FormatCompliance formatCompliance)
             throws ImageReadException, IOException {
         final Collector collector = new FirstDirectoryCollector(readImageData);
-        read(byteSource, params, formatCompliance, collector);
+        read(byteSource, formatCompliance, collector);
         final TiffContents contents = collector.getContents();
         if (contents.directories.isEmpty()) {
             throw new ImageReadException(
@@ -400,14 +399,12 @@ public class TiffReader extends BinaryFileParser {
             IOException {
 
         final Collector collector = new Collector(params);
-        read(byteSource, params, formatCompliance, collector);
+        read(byteSource, formatCompliance, collector);
         return collector.getContents();
     }
 
-    public void read(final ByteSource byteSource, final TiffImagingParameters params,
-            final FormatCompliance formatCompliance, final Listener listener)
+    public void read(final ByteSource byteSource, final FormatCompliance formatCompliance, final Listener listener)
             throws ImageReadException, IOException {
-        // TiffContents contents =
         readDirectories(byteSource, formatCompliance, listener);
     }
 
diff --git a/src/main/java/org/apache/commons/imaging/formats/wbmp/WbmpImagingParameters.java b/src/main/java/org/apache/commons/imaging/formats/wbmp/WbmpImagingParameters.java
index 00af50d..d48c463 100644
--- a/src/main/java/org/apache/commons/imaging/formats/wbmp/WbmpImagingParameters.java
+++ b/src/main/java/org/apache/commons/imaging/formats/wbmp/WbmpImagingParameters.java
@@ -15,6 +15,7 @@
 
 package org.apache.commons.imaging.formats.wbmp;
 
+import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImagingParameters;
 
 /**
@@ -23,4 +24,7 @@ import org.apache.commons.imaging.ImagingParameters;
  */
 public class WbmpImagingParameters extends ImagingParameters {
 
+    public WbmpImagingParameters() {
+        setImageFormat(ImageFormats.WBMP);
+    }
 }
diff --git a/src/main/java/org/apache/commons/imaging/formats/xbm/XbmImagingParameters.java b/src/main/java/org/apache/commons/imaging/formats/xbm/XbmImagingParameters.java
index a86d539..dd96268 100644
--- a/src/main/java/org/apache/commons/imaging/formats/xbm/XbmImagingParameters.java
+++ b/src/main/java/org/apache/commons/imaging/formats/xbm/XbmImagingParameters.java
@@ -15,6 +15,7 @@
 
 package org.apache.commons.imaging.formats.xbm;
 
+import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImagingParameters;
 
 /**
@@ -23,4 +24,7 @@ import org.apache.commons.imaging.ImagingParameters;
  */
 public class XbmImagingParameters extends ImagingParameters {
 
+    public XbmImagingParameters() {
+        setImageFormat(ImageFormats.XBM);
+    }
 }
diff --git a/src/main/java/org/apache/commons/imaging/formats/xpm/XpmImagingParameters.java b/src/main/java/org/apache/commons/imaging/formats/xpm/XpmImagingParameters.java
index 36be857..f47c83c 100644
--- a/src/main/java/org/apache/commons/imaging/formats/xpm/XpmImagingParameters.java
+++ b/src/main/java/org/apache/commons/imaging/formats/xpm/XpmImagingParameters.java
@@ -14,10 +14,17 @@
 
 package org.apache.commons.imaging.formats.xpm;
 
+import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImagingParameters;
 
 /**
  * Xpm format parameters.
  * @since 1.0-alpha3
  */
-public class XpmImagingParameters extends ImagingParameters {}
+public class XpmImagingParameters extends ImagingParameters {
+
+    public XpmImagingParameters() {
+        setImageFormat(ImageFormats.XPM);
+    }
+
+}