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:08 UTC

[commons-imaging] 08/24: [IMAGING-159] Need to pass a format to some Imaging as we don't have the parameters. Fix remaining unit tests

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 dfaa6100da09ae09bac89ce2f72f143a73e86458
Author: Bruno P. Kinoshita <ki...@apache.org>
AuthorDate: Sat May 15 22:10:48 2021 +1200

    [IMAGING-159] Need to pass a format to some Imaging as we don't have the parameters. Fix remaining unit tests
---
 .../org/apache/commons/imaging/ImageFormats.java   | 16 ++++---
 .../org/apache/commons/imaging/ImageParser.java    |  5 +--
 .../java/org/apache/commons/imaging/Imaging.java   | 51 ++++++++++++++++------
 .../imaging/formats/bmp/BmpImageParser.java        |  4 +-
 .../imaging/formats/dcx/DcxImageParser.java        |  5 +--
 .../imaging/formats/gif/GifImageParser.java        |  4 +-
 .../imaging/formats/icns/IcnsImageParser.java      |  4 +-
 .../imaging/formats/ico/IcoImageParser.java        |  4 +-
 .../imaging/formats/jpeg/JpegImageParser.java      |  4 +-
 .../imaging/formats/pcx/PcxImageParser.java        |  4 +-
 .../imaging/formats/png/PngImageParser.java        |  4 +-
 .../imaging/formats/pnm/PnmImageParser.java        | 11 +++--
 .../imaging/formats/psd/PsdImageParser.java        |  4 +-
 .../imaging/formats/tiff/TiffImageParser.java      |  5 +--
 .../imaging/formats/wbmp/WbmpImageParser.java      |  4 +-
 .../imaging/formats/xbm/XbmImageParser.java        |  4 +-
 .../imaging/formats/xpm/XpmImageParser.java        |  4 +-
 .../imaging/examples/ImageWriteExample.java        |  3 +-
 .../commons/imaging/examples/SampleUsage.java      |  4 +-
 .../imaging/formats/bmp/BmpRoundtripTest.java      |  3 +-
 .../formats/jpeg/exif/MicrosoftTagTest.java        |  3 +-
 .../imaging/formats/png/ConvertPngToGifTest.java   |  3 +-
 .../formats/png/PngMultipleRoundtripTest.java      |  3 +-
 .../commons/imaging/formats/png/PngTextTest.java   |  3 +-
 .../formats/png/PngWriteForceTrueColorText.java    |  3 +-
 .../imaging/formats/png/PngWriteReadTest.java      | 11 ++---
 .../imaging/formats/pnm/PnmImageParserTest.java    |  3 +-
 .../formats/tiff/TiffAlphaRoundTripTest.java       |  3 +-
 .../imaging/formats/tiff/TiffCcittTest.java        | 13 +++---
 .../imaging/formats/tiff/TiffRoundtripTest.java    |  3 +-
 .../imaging/formats/tiff/TiffSubImageTest.java     |  3 +-
 .../commons/imaging/formats/xmp/XmpUpdateTest.java |  2 +-
 .../roundtrip/NullParametersRoundtripTest.java     |  2 +-
 .../imaging/roundtrip/PixelDensityRoundtrip.java   |  2 +-
 .../commons/imaging/roundtrip/RoundtripBase.java   |  8 ++--
 35 files changed, 127 insertions(+), 85 deletions(-)

diff --git a/src/main/java/org/apache/commons/imaging/ImageFormats.java b/src/main/java/org/apache/commons/imaging/ImageFormats.java
index fdceaf2..2e10101 100644
--- a/src/main/java/org/apache/commons/imaging/ImageFormats.java
+++ b/src/main/java/org/apache/commons/imaging/ImageFormats.java
@@ -44,21 +44,21 @@ public enum ImageFormats implements ImageFormat {
     BMP(BmpImagingParameters.class, "bmp", "dib"),
     DCX(PcxImagingParameters.class, "dcx"),
     GIF(GifImagingParameters.class, "gif"),
-    ICNS(IcnsImagingParameters.class, ""),
+    ICNS(IcnsImagingParameters.class, "icns"),
     ICO(IcoImagingParameters.class, "ico"),
     JBIG2(ImagingParameters.class),
-    JPEG(JpegImagingParameters.class, "jpg", "jpeg", "jpe", "jif", "jfif", "jfi"),
+    JPEG(JpegImagingParameters.class, "jpg", "jpeg"),
     PAM(PnmImagingParameters.class, "pam"),
     PSD(PsdImagingParameters.class, "psd"),
     PBM(PnmImagingParameters.class, "pbm"),
     PGM(PnmImagingParameters.class, "pgm"),
     PNM(PnmImagingParameters.class, "pnm"),
     PPM(PnmImagingParameters.class, "ppm"),
-    PCX(PcxImagingParameters.class, "pcx"),
+    PCX(PcxImagingParameters.class, "pcx", "pcc"),
     PNG(PngImagingParameters.class, "png"),
     RGBE(RgbeImagingParameters.class, "rgbe"),
     TGA(ImagingParameters.class),
-    TIFF(TiffImagingParameters.class, "tiff", "tif"), // TODO: Or is it .tif the default one?
+    TIFF(TiffImagingParameters.class, "tif", "tiff"),
     WBMP(WbmpImagingParameters.class, "wbmp"),
     XBM(XbmImagingParameters.class, "xbm"),
     XPM(XpmImagingParameters.class, "xpm");
@@ -90,16 +90,18 @@ public enum ImageFormats implements ImageFormat {
 
     @Override
     public ImagingParameters createImagingParameters() {
+        ImagingParameters parameters = null;
         if (this.parametersClass != null) {
             Constructor<?> ctor;
             try {
                 ctor = this.parametersClass.getConstructor();
-                return (ImagingParameters) ctor.newInstance();
+                parameters = (ImagingParameters) ctor.newInstance();
             } catch (NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
                 LOGGER.log(Level.WARNING, "Failed to create imaging parameters: " + e.getMessage(), e);
-                return new ImagingParameters();
+                parameters = new ImagingParameters();
             }
+            parameters.setImageFormat(this);
         }
-        return null;
+        return parameters;
     }
 }
diff --git a/src/main/java/org/apache/commons/imaging/ImageParser.java b/src/main/java/org/apache/commons/imaging/ImageParser.java
index 4b4eed5..7e92cd0 100644
--- a/src/main/java/org/apache/commons/imaging/ImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/ImageParser.java
@@ -905,12 +905,11 @@ public abstract class ImageParser<T extends ImagingParameters> extends BinaryFil
 
         final int index = fileName.lastIndexOf('.');
         if (index >= 0) {
-            String ext = fileName.substring(index);
+            String ext = fileName.substring(index + 1);
             ext = ext.toLowerCase(Locale.ENGLISH);
 
             for (final String ext2 : exts) {
-                final String ext2Lower = ext2.toLowerCase(Locale.ENGLISH);
-                if (ext2Lower.equals(ext)) {
+                if (ext2.equals(ext)) {
                     return true;
                 }
             }
diff --git a/src/main/java/org/apache/commons/imaging/Imaging.java b/src/main/java/org/apache/commons/imaging/Imaging.java
index 1682bb0..5f0bb05 100644
--- a/src/main/java/org/apache/commons/imaging/Imaging.java
+++ b/src/main/java/org/apache/commons/imaging/Imaging.java
@@ -28,7 +28,7 @@ import java.io.InputStream;
 import java.io.OutputStream;
 import java.util.List;
 import java.util.Locale;
-import java.util.Objects;
+import java.util.stream.Stream;
 
 import org.apache.commons.imaging.common.ImageMetadata;
 import org.apache.commons.imaging.common.XmpEmbeddable;
@@ -330,7 +330,25 @@ public final class Imaging {
             } else if (compareBytePair(MAGIC_NUMBERS_RGBE, bytePair)) {
                 return ImageFormats.RGBE;
             }
-            return ImageFormats.UNKNOWN;
+            return Stream
+                .of(ImageFormats.values())
+                .filter((imageFormat) -> {
+                    return Stream
+                        .of(imageFormat.getExtensions())
+                        .anyMatch((extension) -> {
+                            final String fileName = byteSource.getFileName();
+                            if (fileName == null || fileName.trim().length() == 0) {
+                                return false;
+                            }
+                            final String fileExtension = fileName.substring(fileName.lastIndexOf('.') + 1);
+                            return extension != null
+                                    && extension.trim().length() > 0
+                                    && fileExtension.equalsIgnoreCase(extension);
+                        });
+                })
+                .findFirst()
+                .orElse(ImageFormats.UNKNOWN)
+            ;
         }
     }
 
@@ -1418,13 +1436,15 @@ public final class Imaging {
         return getBufferedImage(new ByteSourceFile(file), params);
     }
 
-
-
+    @SuppressWarnings("unchecked")
     private static <T extends ImagingParameters> BufferedImage getBufferedImage(final ByteSource byteSource,
             T params) throws ImageReadException, IOException {
         // TODO: better generics or redesign API
-        @SuppressWarnings("unchecked")
         final ImageParser<T> imageParser = (ImageParser<T>) getImageParser(byteSource);
+        if (params == null) {
+            ImageFormat format = Imaging.guessFormat(byteSource);
+            params = (T) format.createImagingParameters();
+        }
         return imageParser.getBufferedImage(byteSource, params);
     }
 
@@ -1444,6 +1464,7 @@ public final class Imaging {
      * provide this data.
      * @param src a valid BufferedImage object
      * @param file the file to which the output image is to be written
+     * @param format the format in which the output image is to be written
      * @param params optional parameters
      * @throws ImageWriteException in the event of a format violation,
      * unsupported image format, etc.
@@ -1451,11 +1472,11 @@ public final class Imaging {
      * @see ImagingConstants
      */
     public static void writeImage(final BufferedImage src, final File file,
-            final ImagingParameters params) throws ImageWriteException,
+            final ImageFormat format, final ImagingParameters params) throws ImageWriteException,
             IOException {
         try (FileOutputStream fos = new FileOutputStream(file);
                 BufferedOutputStream os = new BufferedOutputStream(fos)) {
-            writeImage(src, os, params);
+            writeImage(src, os, format, params);
         }
     }
 
@@ -1475,6 +1496,7 @@ public final class Imaging {
      * image info, metadata and ICC profiles from all image formats that
      * provide this data.
      * @param src a valid BufferedImage object
+     * @param format the format in which the output image is to be written
      * @param params optional parameters
      * @return if successful, a valid array of bytes.
      * @throws ImageWriteException in the event of a format violation,
@@ -1483,11 +1505,11 @@ public final class Imaging {
      * @see ImagingConstants
      */
     public static byte[] writeImageToBytes(final BufferedImage src,
-            final ImagingParameters params) throws ImageWriteException,
+            final ImageFormat format, final ImagingParameters params) throws ImageWriteException,
             IOException {
         final ByteArrayOutputStream os = new ByteArrayOutputStream();
 
-        writeImage(src, os, params);
+        writeImage(src, os, format, params);
 
         return os.toByteArray();
     }
@@ -1508,6 +1530,7 @@ public final class Imaging {
      * provide this data.
      * @param src a valid BufferedImage object
      * @param os the OutputStream to which the output image is to be written
+     * @param format the format in which the output image is to be written
      * @param params optional parameters
      * @throws ImageWriteException in the event of a format violation,
      * unsupported image format, etc.
@@ -1517,20 +1540,22 @@ public final class Imaging {
     // TODO: fix generics due to ImageParser retrieved via getAllImageParsers, and the given ImagingParameters type
     @SuppressWarnings({ "unchecked", "rawtypes" })
     public static void writeImage(final BufferedImage src, final OutputStream os,
-            ImagingParameters params) throws ImageWriteException,
+            final ImageFormat format, ImagingParameters params) throws ImageWriteException,
             IOException {
-        Objects.requireNonNull(params, "You must provide a valid imaging parameters object.");
         final ImageParser<?>[] imageParsers = ImageParser.getAllImageParsers();
+        if (params == null) {
+            params = format.createImagingParameters();
+        }
 
         ImageParser imageParser = null;
         for (final ImageParser<?> imageParser2 : imageParsers) {
-            if (imageParser2.canAcceptType(params.getImageFormat())) {
+            if (imageParser2.canAcceptType(format)) {
                 imageParser = imageParser2;
                 break;
             }
         }
         if (imageParser == null) {
-            throw new ImageWriteException("Unknown Format: " + params.getImageFormat());
+            throw new ImageWriteException("Unknown Format: " + format);
         }
         imageParser.writeImage(src, os, params);
     }
diff --git a/src/main/java/org/apache/commons/imaging/formats/bmp/BmpImageParser.java b/src/main/java/org/apache/commons/imaging/formats/bmp/BmpImageParser.java
index 01938ac..f00d4fd 100644
--- a/src/main/java/org/apache/commons/imaging/formats/bmp/BmpImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/formats/bmp/BmpImageParser.java
@@ -53,8 +53,8 @@ public class BmpImageParser extends ImageParser<BmpImagingParameters> {
 
     private static final Logger LOGGER = Logger.getLogger(BmpImageParser.class.getName());
 
-    private static final String DEFAULT_EXTENSION = ".bmp";
-    private static final String[] ACCEPTED_EXTENSIONS = { DEFAULT_EXTENSION, };
+    private static final String DEFAULT_EXTENSION = ImageFormats.BMP.getDefaultExtension();
+    private static final String[] ACCEPTED_EXTENSIONS = ImageFormats.BMP.getExtensions();
     private static final byte[] BMP_HEADER_SIGNATURE = { 0x42, 0x4d, };
     private static final int BI_RGB = 0;
     private static final int BI_RLE4 = 2;
diff --git a/src/main/java/org/apache/commons/imaging/formats/dcx/DcxImageParser.java b/src/main/java/org/apache/commons/imaging/formats/dcx/DcxImageParser.java
index 607f635..c26a2f7 100644
--- a/src/main/java/org/apache/commons/imaging/formats/dcx/DcxImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/formats/dcx/DcxImageParser.java
@@ -42,10 +42,9 @@ import org.apache.commons.imaging.formats.pcx.PcxImageParser;
 import org.apache.commons.imaging.formats.pcx.PcxImagingParameters;
 
 public class DcxImageParser extends ImageParser<PcxImagingParameters> {
-    private static final ImageFormat imageFormat = ImageFormats.DCX;
     // See http://www.fileformat.fine/format/pcx/egff.htm for documentation
-    private static final String DEFAULT_EXTENSION = imageFormat.getDefaultExtension();
-    private static final String[] ACCEPTED_EXTENSIONS = imageFormat.getExtensions();
+    private static final String DEFAULT_EXTENSION = ImageFormats.DCX.getDefaultExtension();
+    private static final String[] ACCEPTED_EXTENSIONS = ImageFormats.DCX.getExtensions();
 
     public DcxImageParser() {
         super.setByteOrder(ByteOrder.LITTLE_ENDIAN);
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 92c4d03..3a2c606 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
@@ -59,8 +59,8 @@ public class GifImageParser extends ImageParser<GifImagingParameters> implements
 
     private static final Logger LOGGER = Logger.getLogger(GifImageParser.class.getName());
 
-    private static final String DEFAULT_EXTENSION = ".gif";
-    private static final String[] ACCEPTED_EXTENSIONS = { DEFAULT_EXTENSION, };
+    private static final String DEFAULT_EXTENSION = ImageFormats.GIF.getDefaultExtension();
+    private static final String[] ACCEPTED_EXTENSIONS = ImageFormats.GIF.getExtensions();
     private static final byte[] GIF_HEADER_SIGNATURE = { 71, 73, 70 };
     private static final int EXTENSION_CODE = 0x21;
     private static final int IMAGE_SEPARATOR = 0x2C;
diff --git a/src/main/java/org/apache/commons/imaging/formats/icns/IcnsImageParser.java b/src/main/java/org/apache/commons/imaging/formats/icns/IcnsImageParser.java
index 9cb7d63..2673386 100644
--- a/src/main/java/org/apache/commons/imaging/formats/icns/IcnsImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/formats/icns/IcnsImageParser.java
@@ -41,8 +41,8 @@ import org.apache.commons.imaging.common.bytesource.ByteSource;
 
 public class IcnsImageParser extends ImageParser<IcnsImagingParameters> {
     static final int ICNS_MAGIC = IcnsType.typeAsInt("icns");
-    private static final String DEFAULT_EXTENSION = ".icns";
-    private static final String[] ACCEPTED_EXTENSIONS = { ".icns", };
+    private static final String DEFAULT_EXTENSION = ImageFormats.ICNS.getDefaultExtension();
+    private static final String[] ACCEPTED_EXTENSIONS = ImageFormats.ICNS.getExtensions();
 
     public IcnsImageParser() {
         super.setByteOrder(ByteOrder.BIG_ENDIAN);
diff --git a/src/main/java/org/apache/commons/imaging/formats/ico/IcoImageParser.java b/src/main/java/org/apache/commons/imaging/formats/ico/IcoImageParser.java
index d6a4bd7..416f55f 100644
--- a/src/main/java/org/apache/commons/imaging/formats/ico/IcoImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/formats/ico/IcoImageParser.java
@@ -49,8 +49,8 @@ import org.apache.commons.imaging.palette.PaletteFactory;
 import org.apache.commons.imaging.palette.SimplePalette;
 
 public class IcoImageParser extends ImageParser<IcoImagingParameters> {
-    private static final String DEFAULT_EXTENSION = ".ico";
-    private static final String[] ACCEPTED_EXTENSIONS = { ".ico", ".cur", };
+    private static final String DEFAULT_EXTENSION = ImageFormats.ICO.getDefaultExtension();
+    private static final String[] ACCEPTED_EXTENSIONS = ImageFormats.ICO.getExtensions();
 
     public IcoImageParser() {
         super.setByteOrder(ByteOrder.LITTLE_ENDIAN);
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 b7e446f..b0d82a3 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
@@ -66,8 +66,8 @@ public class JpegImageParser extends ImageParser<JpegImagingParameters> implemen
 
     private static final Logger LOGGER = Logger.getLogger(JpegImageParser.class.getName());
 
-    private static final String DEFAULT_EXTENSION = ".jpg";
-    private static final String[] ACCEPTED_EXTENSIONS = { ".jpg", ".jpeg", };
+    private static final String DEFAULT_EXTENSION = ImageFormats.JPEG.getDefaultExtension();
+    private static final String[] ACCEPTED_EXTENSIONS = ImageFormats.JPEG.getExtensions();
 
     public JpegImageParser() {
         setByteOrder(ByteOrder.BIG_ENDIAN);
diff --git a/src/main/java/org/apache/commons/imaging/formats/pcx/PcxImageParser.java b/src/main/java/org/apache/commons/imaging/formats/pcx/PcxImageParser.java
index 42b8a7b..7dced55 100644
--- a/src/main/java/org/apache/commons/imaging/formats/pcx/PcxImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/formats/pcx/PcxImageParser.java
@@ -62,8 +62,8 @@ public class PcxImageParser extends ImageParser<PcxImagingParameters> {
     // don't support uncompressed PCX, and/or don't handle black and white
     // images properly.
 
-    private static final String DEFAULT_EXTENSION = ".pcx";
-    private static final String[] ACCEPTED_EXTENSIONS = { ".pcx", ".pcc", };
+    private static final String DEFAULT_EXTENSION = ImageFormats.PCX.getDefaultExtension();
+    private static final String[] ACCEPTED_EXTENSIONS = ImageFormats.PCX.getExtensions();
 
     public PcxImageParser() {
         super.setByteOrder(ByteOrder.LITTLE_ENDIAN);
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 1632ecc..19d63f2 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
@@ -74,8 +74,8 @@ public class PngImageParser extends ImageParser<PngImagingParameters>  implement
 
     private static final Logger LOGGER = Logger.getLogger(PngImageParser.class.getName());
 
-    private static final String DEFAULT_EXTENSION = ".png";
-    private static final String[] ACCEPTED_EXTENSIONS = { DEFAULT_EXTENSION, };
+    private static final String DEFAULT_EXTENSION = ImageFormats.PNG.getDefaultExtension();
+    private static final String[] ACCEPTED_EXTENSIONS = ImageFormats.PNG.getExtensions();
 
     @Override
     public String getName() {
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 c51f581..2e0113e 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
@@ -41,9 +41,14 @@ import org.apache.commons.imaging.common.bytesource.ByteSource;
 import org.apache.commons.imaging.palette.PaletteFactory;
 
 public class PnmImageParser extends ImageParser<PnmImagingParameters> {
-    private static final String DEFAULT_EXTENSION = ".pnm";
-    private static final String[] ACCEPTED_EXTENSIONS = { ".pbm", ".pgm",
-            ".ppm", ".pnm", ".pam" };
+    private static final String DEFAULT_EXTENSION = ImageFormats.PNM.getDefaultExtension();
+    private static final String[] ACCEPTED_EXTENSIONS = {
+            ImageFormats.PAM.getDefaultExtension(),
+            ImageFormats.PBM.getDefaultExtension(),
+            ImageFormats.PGM.getDefaultExtension(),
+            ImageFormats.PNM.getDefaultExtension(),
+            ImageFormats.PPM.getDefaultExtension()
+    };
 
     public PnmImageParser() {
         super.setByteOrder(ByteOrder.LITTLE_ENDIAN);
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 8267470..4d40c66 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
@@ -55,8 +55,8 @@ 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 {
-    private static final String DEFAULT_EXTENSION = ".psd";
-    private static final String[] ACCEPTED_EXTENSIONS = { DEFAULT_EXTENSION, };
+    private static final String DEFAULT_EXTENSION = ImageFormats.PSD.getDefaultExtension();
+    private static final String[] ACCEPTED_EXTENSIONS = ImageFormats.PSD.getExtensions();
     private static final int PSD_SECTION_HEADER = 0;
     private static final int PSD_SECTION_COLOR_MODE = 1;
     private static final int PSD_SECTION_IMAGE_RESOURCES = 2;
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 ee2c7f4..4e2d0f2 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
@@ -65,8 +65,8 @@ import org.apache.commons.imaging.formats.tiff.photometricinterpreters.Photometr
 import org.apache.commons.imaging.formats.tiff.write.TiffImageWriterLossy;
 
 public class TiffImageParser extends ImageParser<TiffImagingParameters> implements XmpEmbeddable {
-    private static final String DEFAULT_EXTENSION = ".tif";
-    private static final String[] ACCEPTED_EXTENSIONS = { ".tif", ".tiff", };
+    private static final String DEFAULT_EXTENSION = ImageFormats.TIFF.getDefaultExtension();
+    private static final String[] ACCEPTED_EXTENSIONS = ImageFormats.TIFF.getExtensions();
 
     @Override
     public String getName() {
@@ -92,7 +92,6 @@ 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(params != null ? params.isStrict() : false).readFirstDirectory(
                 byteSource, false, formatCompliance);
diff --git a/src/main/java/org/apache/commons/imaging/formats/wbmp/WbmpImageParser.java b/src/main/java/org/apache/commons/imaging/formats/wbmp/WbmpImageParser.java
index d71ab43..372a4b9 100644
--- a/src/main/java/org/apache/commons/imaging/formats/wbmp/WbmpImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/formats/wbmp/WbmpImageParser.java
@@ -41,8 +41,8 @@ import org.apache.commons.imaging.common.ImageMetadata;
 import org.apache.commons.imaging.common.bytesource.ByteSource;
 
 public class WbmpImageParser extends ImageParser<WbmpImagingParameters> {
-    private static final String DEFAULT_EXTENSION = ".wbmp";
-    private static final String[] ACCEPTED_EXTENSIONS = { ".wbmp", };
+    private static final String DEFAULT_EXTENSION = ImageFormats.WBMP.getDefaultExtension();
+    private static final String[] ACCEPTED_EXTENSIONS = ImageFormats.WBMP.getExtensions();
 
     @Override
     public String getName() {
diff --git a/src/main/java/org/apache/commons/imaging/formats/xbm/XbmImageParser.java b/src/main/java/org/apache/commons/imaging/formats/xbm/XbmImageParser.java
index 51113de..cf89430 100644
--- a/src/main/java/org/apache/commons/imaging/formats/xbm/XbmImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/formats/xbm/XbmImageParser.java
@@ -47,8 +47,8 @@ import org.apache.commons.imaging.common.ImageMetadata;
 import org.apache.commons.imaging.common.bytesource.ByteSource;
 
 public class XbmImageParser extends ImageParser<XbmImagingParameters> {
-    private static final String DEFAULT_EXTENSION = ".xbm";
-    private static final String[] ACCEPTED_EXTENSIONS = { ".xbm", };
+    private static final String DEFAULT_EXTENSION = ImageFormats.XBM.getDefaultExtension();
+    private static final String[] ACCEPTED_EXTENSIONS = ImageFormats.XBM.getExtensions();
 
     @Override
     public String getName() {
diff --git a/src/main/java/org/apache/commons/imaging/formats/xpm/XpmImageParser.java b/src/main/java/org/apache/commons/imaging/formats/xpm/XpmImageParser.java
index 24ccf4c..77490de 100644
--- a/src/main/java/org/apache/commons/imaging/formats/xpm/XpmImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/formats/xpm/XpmImageParser.java
@@ -52,8 +52,8 @@ import org.apache.commons.imaging.palette.PaletteFactory;
 import org.apache.commons.imaging.palette.SimplePalette;
 
 public class XpmImageParser extends ImageParser<XpmImagingParameters> {
-    private static final String DEFAULT_EXTENSION = ".xpm";
-    private static final String[] ACCEPTED_EXTENSIONS = { ".xpm", };
+    private static final String DEFAULT_EXTENSION = ImageFormats.XPM.getDefaultExtension();
+    private static final String[] ACCEPTED_EXTENSIONS = ImageFormats.XPM.getExtensions();
     private static Map<String, Integer> colorNames;
     private static final char[] WRITE_PALETTE = { ' ', '.', 'X', 'o', 'O', '+',
         '@', '#', '$', '%', '&', '*', '=', '-', ';', ':', '>', ',', '<',
diff --git a/src/test/java/org/apache/commons/imaging/examples/ImageWriteExample.java b/src/test/java/org/apache/commons/imaging/examples/ImageWriteExample.java
index aefc017..d035777 100644
--- a/src/test/java/org/apache/commons/imaging/examples/ImageWriteExample.java
+++ b/src/test/java/org/apache/commons/imaging/examples/ImageWriteExample.java
@@ -20,6 +20,7 @@ import java.awt.image.BufferedImage;
 import java.io.File;
 import java.io.IOException;
 
+import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageReadException;
 import org.apache.commons.imaging.ImageWriteException;
 import org.apache.commons.imaging.Imaging;
@@ -36,7 +37,7 @@ public class ImageWriteExample {
         final TiffImagingParameters params = new TiffImagingParameters();
         params.setCompression(TiffConstants.TIFF_COMPRESSION_UNCOMPRESSED);
 
-        return Imaging.writeImageToBytes(image, params);
+        return Imaging.writeImageToBytes(image, ImageFormats.TIFF, params);
     }
 
 }
diff --git a/src/test/java/org/apache/commons/imaging/examples/SampleUsage.java b/src/test/java/org/apache/commons/imaging/examples/SampleUsage.java
index 40a43c8..9405def 100644
--- a/src/test/java/org/apache/commons/imaging/examples/SampleUsage.java
+++ b/src/test/java/org/apache/commons/imaging/examples/SampleUsage.java
@@ -67,10 +67,10 @@ public class SampleUsage {
             final File dst = someFile;
             final ImageFormat format = ImageFormats.PNG;
             final PngImagingParameters optionalParams = new PngImagingParameters();
-            Imaging.writeImage(image, dst, optionalParams);
+            Imaging.writeImage(image, dst, format, optionalParams);
 
             final OutputStream os = someOutputStream;
-            Imaging.writeImage(image, os, optionalParams);
+            Imaging.writeImage(image, os, format, optionalParams);
 
             // <b>get the image's embedded ICC Profile, if it has one. </b>
             final byte[] iccProfileBytes = Imaging.getICCProfileBytes(imageBytes);
diff --git a/src/test/java/org/apache/commons/imaging/formats/bmp/BmpRoundtripTest.java b/src/test/java/org/apache/commons/imaging/formats/bmp/BmpRoundtripTest.java
index 20139e6..b1fdaf8 100644
--- a/src/test/java/org/apache/commons/imaging/formats/bmp/BmpRoundtripTest.java
+++ b/src/test/java/org/apache/commons/imaging/formats/bmp/BmpRoundtripTest.java
@@ -25,6 +25,7 @@ import java.io.File;
 import java.io.IOException;
 import java.util.Random;
 
+import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageReadException;
 import org.apache.commons.imaging.ImageWriteException;
 import org.apache.commons.imaging.Imaging;
@@ -143,7 +144,7 @@ public class BmpRoundtripTest extends BmpBaseTest {
         // writeParams.put(PngConstants.PARAM_KEY_BMP_FORCE_TRUE_COLOR,
         // Boolean.TRUE);
 
-        final byte[] bytes = Imaging.writeImageToBytes(srcImage, writeParams);
+        final byte[] bytes = Imaging.writeImageToBytes(srcImage, ImageFormats.BMP, writeParams);
 
         // Debug.debug("bytes", bytes);
 
diff --git a/src/test/java/org/apache/commons/imaging/formats/jpeg/exif/MicrosoftTagTest.java b/src/test/java/org/apache/commons/imaging/formats/jpeg/exif/MicrosoftTagTest.java
index 1859e50..2d7259b 100644
--- a/src/test/java/org/apache/commons/imaging/formats/jpeg/exif/MicrosoftTagTest.java
+++ b/src/test/java/org/apache/commons/imaging/formats/jpeg/exif/MicrosoftTagTest.java
@@ -25,6 +25,7 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageReadException;
 import org.apache.commons.imaging.ImageWriteException;
 import org.apache.commons.imaging.Imaging;
@@ -58,7 +59,7 @@ public class MicrosoftTagTest extends ExifBaseTest {
         root.add(MicrosoftTagConstants.EXIF_TAG_XPTITLE, TITLE);
         final TiffImagingParameters params = new TiffImagingParameters();
         params.setExif(exifSet);
-        final byte[] bytes = Imaging.writeImageToBytes(image, params);
+        final byte[] bytes = Imaging.writeImageToBytes(image, ImageFormats.TIFF, params);
         checkFields(bytes);
     }
 
diff --git a/src/test/java/org/apache/commons/imaging/formats/png/ConvertPngToGifTest.java b/src/test/java/org/apache/commons/imaging/formats/png/ConvertPngToGifTest.java
index 30e8a47..36ff62a 100644
--- a/src/test/java/org/apache/commons/imaging/formats/png/ConvertPngToGifTest.java
+++ b/src/test/java/org/apache/commons/imaging/formats/png/ConvertPngToGifTest.java
@@ -23,6 +23,7 @@ import java.awt.image.BufferedImage;
 import java.io.File;
 import java.util.List;
 
+import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.Imaging;
 import org.apache.commons.imaging.formats.gif.GifImagingParameters;
 import org.apache.commons.imaging.internal.Debug;
@@ -49,7 +50,7 @@ public class ConvertPngToGifTest extends PngBaseTest {
             final File outFile = File.createTempFile(imageFile.getName() + ".", ".gif");
 
             final GifImagingParameters gifParams = new GifImagingParameters();
-            Imaging.writeImage(image, outFile, gifParams);
+            Imaging.writeImage(image, outFile, ImageFormats.GIF, gifParams);
         }
         Debug.debug("complete.");
     }
diff --git a/src/test/java/org/apache/commons/imaging/formats/png/PngMultipleRoundtripTest.java b/src/test/java/org/apache/commons/imaging/formats/png/PngMultipleRoundtripTest.java
index d224fab..6117532 100644
--- a/src/test/java/org/apache/commons/imaging/formats/png/PngMultipleRoundtripTest.java
+++ b/src/test/java/org/apache/commons/imaging/formats/png/PngMultipleRoundtripTest.java
@@ -23,6 +23,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 import java.awt.image.BufferedImage;
 import java.io.File;
 
+import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.Imaging;
 import org.apache.commons.imaging.internal.Debug;
 import org.apache.commons.io.FilenameUtils;
@@ -62,7 +63,7 @@ public class PngMultipleRoundtripTest extends PngBaseTest {
                 Debug.debug("tempFile", tempFile);
 
                 final PngImagingParameters writeParams = new PngImagingParameters();
-                Imaging.writeImage(image, tempFile, writeParams);
+                Imaging.writeImage(image, tempFile, ImageFormats.PNG, writeParams);
 
                 lastFile = tempFile;
             }
diff --git a/src/test/java/org/apache/commons/imaging/formats/png/PngTextTest.java b/src/test/java/org/apache/commons/imaging/formats/png/PngTextTest.java
index b590dad..2b219e1 100644
--- a/src/test/java/org/apache/commons/imaging/formats/png/PngTextTest.java
+++ b/src/test/java/org/apache/commons/imaging/formats/png/PngTextTest.java
@@ -27,6 +27,7 @@ import java.io.File;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.Imaging;
 import org.apache.commons.io.FileUtils;
 import org.junit.jupiter.api.Test;
@@ -65,7 +66,7 @@ public class PngTextTest extends PngBaseTest {
 
         writeParams.setTextChunks(writeTexts);
 
-        final byte[] bytes = Imaging.writeImageToBytes(srcImage, writeParams);
+        final byte[] bytes = Imaging.writeImageToBytes(srcImage, ImageFormats.PNG, writeParams);
 
         final File tempFile = File.createTempFile("temp", ".png");
         FileUtils.writeByteArrayToFile(tempFile, bytes);
diff --git a/src/test/java/org/apache/commons/imaging/formats/png/PngWriteForceTrueColorText.java b/src/test/java/org/apache/commons/imaging/formats/png/PngWriteForceTrueColorText.java
index 609e1be..65809e0 100644
--- a/src/test/java/org/apache/commons/imaging/formats/png/PngWriteForceTrueColorText.java
+++ b/src/test/java/org/apache/commons/imaging/formats/png/PngWriteForceTrueColorText.java
@@ -23,6 +23,7 @@ import java.awt.image.BufferedImage;
 import java.io.File;
 import java.util.List;
 
+import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.Imaging;
 import org.apache.commons.imaging.internal.Debug;
 import org.junit.jupiter.api.Test;
@@ -54,7 +55,7 @@ public class PngWriteForceTrueColorText extends PngBaseTest {
 
                 final PngImagingParameters params = new PngImagingParameters();
                 params.setForceTrueColor(Boolean.TRUE);
-                Imaging.writeImage(image, outFile, params);
+                Imaging.writeImage(image, outFile, ImageFormats.PNG, params);
 
                 final BufferedImage image2 = Imaging.getBufferedImage(outFile, new PngImagingParameters());
                 assertNotNull(image2);
diff --git a/src/test/java/org/apache/commons/imaging/formats/png/PngWriteReadTest.java b/src/test/java/org/apache/commons/imaging/formats/png/PngWriteReadTest.java
index 51d1695..d679537 100644
--- a/src/test/java/org/apache/commons/imaging/formats/png/PngWriteReadTest.java
+++ b/src/test/java/org/apache/commons/imaging/formats/png/PngWriteReadTest.java
@@ -29,6 +29,7 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.Random;
 
+import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageReadException;
 import org.apache.commons.imaging.ImageWriteException;
 import org.apache.commons.imaging.Imaging;
@@ -106,7 +107,7 @@ public class PngWriteReadTest extends ImagingTest {
     public void testTransparency() throws Exception {
         // Test for https://issues.apache.org/jira/browse/SANSELAN-52
         final int[][] smallAscendingPixels = getAscendingRawData(256, 256);
-        final byte[] pngBytes = Imaging.writeImageToBytes(imageDataToBufferedImage(smallAscendingPixels), new PngImagingParameters());
+        final byte[] pngBytes = Imaging.writeImageToBytes(imageDataToBufferedImage(smallAscendingPixels), ImageFormats.PNG, new PngImagingParameters());
         assertTrue(Imaging.getImageInfo(pngBytes).isTransparent());
     }
 
@@ -116,7 +117,7 @@ public class PngWriteReadTest extends ImagingTest {
         optionalParams.setPhysicalScale(PhysicalScale.createFromMeters(0.01, 0.02));
 
         final int[][] smallAscendingPixels = getAscendingRawData(256, 256);
-        final byte[] pngBytes = Imaging.writeImageToBytes(imageDataToBufferedImage(smallAscendingPixels), optionalParams);
+        final byte[] pngBytes = Imaging.writeImageToBytes(imageDataToBufferedImage(smallAscendingPixels), ImageFormats.PNG, optionalParams);
         final PngImageInfo imageInfo = (PngImageInfo) Imaging.getImageInfo(pngBytes);
         final PhysicalScale physicalScale = imageInfo.getPhysicalScale();
         assertTrue(physicalScale.isInMeters());
@@ -130,7 +131,7 @@ public class PngWriteReadTest extends ImagingTest {
         optionalParams.setPhysicalScale(PhysicalScale.createFromRadians(0.01, 0.02));
 
         final int[][] smallAscendingPixels = getAscendingRawData(256, 256);
-        final byte[] pngBytes = Imaging.writeImageToBytes(imageDataToBufferedImage(smallAscendingPixels), optionalParams);
+        final byte[] pngBytes = Imaging.writeImageToBytes(imageDataToBufferedImage(smallAscendingPixels), ImageFormats.PNG, optionalParams);
         final PngImageInfo imageInfo = (PngImageInfo) Imaging.getImageInfo(pngBytes);
         final PhysicalScale physicalScale = imageInfo.getPhysicalScale();
         assertTrue(physicalScale.isInRadians());
@@ -174,7 +175,7 @@ public class PngWriteReadTest extends ImagingTest {
         // writeParams.put(PngConstants.PARAM_KEY_PNG_FORCE_TRUE_COLOR,
         // Boolean.TRUE);
 
-        final byte[] bytes = Imaging.writeImageToBytes(srcImage, writeParams);
+        final byte[] bytes = Imaging.writeImageToBytes(srcImage, ImageFormats.PNG, writeParams);
 
         // Debug.debug("bytes", bytes);
 
@@ -201,7 +202,7 @@ public class PngWriteReadTest extends ImagingTest {
         final PngImagingParameters writeParams = new PngImagingParameters();
         writeParams.setTextChunks(textChunks);
 
-        final byte[] bytes = Imaging.writeImageToBytes(srcImage, writeParams);
+        final byte[] bytes = Imaging.writeImageToBytes(srcImage, ImageFormats.PNG, writeParams);
 
         // Debug.debug("bytes", bytes);
 
diff --git a/src/test/java/org/apache/commons/imaging/formats/pnm/PnmImageParserTest.java b/src/test/java/org/apache/commons/imaging/formats/pnm/PnmImageParserTest.java
index 3f73f19..b03af4f 100644
--- a/src/test/java/org/apache/commons/imaging/formats/pnm/PnmImageParserTest.java
+++ b/src/test/java/org/apache/commons/imaging/formats/pnm/PnmImageParserTest.java
@@ -25,6 +25,7 @@ import java.io.IOException;
 import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
 
+import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageInfo;
 import org.apache.commons.imaging.ImageReadException;
 import org.apache.commons.imaging.ImageWriteException;
@@ -55,7 +56,7 @@ public class PnmImageParserTest {
         final PnmImagingParameters params = new PnmImagingParameters();
         params.setRawBits(Boolean.TRUE);
 
-        final byte[] dstBytes = Imaging.writeImageToBytes(srcImage, params);
+        final byte[] dstBytes = Imaging.writeImageToBytes(srcImage, ImageFormats.PNM,  params);
         final BufferedImage dstImage = Imaging.getBufferedImage(dstBytes);
 
         assertEquals(srcImage.getWidth(), dstImage.getWidth());
diff --git a/src/test/java/org/apache/commons/imaging/formats/tiff/TiffAlphaRoundTripTest.java b/src/test/java/org/apache/commons/imaging/formats/tiff/TiffAlphaRoundTripTest.java
index a51ed31..6c72f6b 100644
--- a/src/test/java/org/apache/commons/imaging/formats/tiff/TiffAlphaRoundTripTest.java
+++ b/src/test/java/org/apache/commons/imaging/formats/tiff/TiffAlphaRoundTripTest.java
@@ -29,6 +29,7 @@ import java.io.FileOutputStream;
 import java.nio.ByteOrder;
 import java.nio.file.Path;
 
+import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.Imaging;
 import org.apache.commons.imaging.formats.tiff.constants.TiffTagConstants;
 import org.apache.commons.imaging.formats.tiff.write.TiffImageWriterLossy;
@@ -80,7 +81,7 @@ public class TiffAlphaRoundTripTest {
             //         correctness of a round-trip test.
             final File file = new File(tempDir.toFile(), "TiffAlphaRoundTripTest.tif");
             file.delete();
-            Imaging.writeImage(image0, file, new TiffImagingParameters());
+            Imaging.writeImage(image0, file, ImageFormats.TIFF, new TiffImagingParameters());
             final BufferedImage image1 = Imaging.getBufferedImage(file);
 
             // Step 2:  create a composite image overlaying a white background
diff --git a/src/test/java/org/apache/commons/imaging/formats/tiff/TiffCcittTest.java b/src/test/java/org/apache/commons/imaging/formats/tiff/TiffCcittTest.java
index 567b4d5..6f54a5f 100644
--- a/src/test/java/org/apache/commons/imaging/formats/tiff/TiffCcittTest.java
+++ b/src/test/java/org/apache/commons/imaging/formats/tiff/TiffCcittTest.java
@@ -23,6 +23,7 @@ import static org.junit.jupiter.api.Assertions.fail;
 import java.awt.image.BufferedImage;
 import java.io.IOException;
 
+import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageReadException;
 import org.apache.commons.imaging.ImageWriteException;
 import org.apache.commons.imaging.Imaging;
@@ -159,7 +160,7 @@ public class TiffCcittTest extends TiffBaseTest {
             try {
                 final TiffImagingParameters params = new TiffImagingParameters();
                 params.setCompression(TiffConstants.TIFF_COMPRESSION_CCITT_1D);
-                final byte[] compressed = Imaging.writeImageToBytes(image, params);
+                final byte[] compressed = Imaging.writeImageToBytes(image, ImageFormats.TIFF, params);
                 final BufferedImage result = Imaging.getBufferedImage(compressed);
                 compareImages(image, result);
             } catch (final ImageWriteException | ImageReadException | IOException ex) {
@@ -171,7 +172,7 @@ public class TiffCcittTest extends TiffBaseTest {
                 final TiffImagingParameters params = new TiffImagingParameters();
                 params.setCompression(TiffConstants.TIFF_COMPRESSION_CCITT_GROUP_3);
                 params.setT4Options(0);
-                final byte[] compressed = Imaging.writeImageToBytes(image, params);
+                final byte[] compressed = Imaging.writeImageToBytes(image, ImageFormats.TIFF, params);
                 final BufferedImage result = Imaging.getBufferedImage(compressed);
                 compareImages(image, result);
             } catch (final ImageWriteException | ImageReadException | IOException ex) {
@@ -183,7 +184,7 @@ public class TiffCcittTest extends TiffBaseTest {
                 final TiffImagingParameters params = new TiffImagingParameters();
                 params.setCompression(TiffConstants.TIFF_COMPRESSION_CCITT_GROUP_3);
                 params.setT4Options(4);
-                final byte[] compressed = Imaging.writeImageToBytes(image, params);
+                final byte[] compressed = Imaging.writeImageToBytes(image, ImageFormats.TIFF, params);
                 final BufferedImage result = Imaging.getBufferedImage(compressed);
                 compareImages(image, result);
             } catch (final ImageWriteException | ImageReadException | IOException ex) {
@@ -195,7 +196,7 @@ public class TiffCcittTest extends TiffBaseTest {
                 final TiffImagingParameters params = new TiffImagingParameters();
                 params.setCompression(TiffConstants.TIFF_COMPRESSION_CCITT_GROUP_3);
                 params.setT4Options(1);
-                final byte[] compressed = Imaging.writeImageToBytes(image, params);
+                final byte[] compressed = Imaging.writeImageToBytes(image, ImageFormats.TIFF, params);
                 final BufferedImage result = Imaging.getBufferedImage(compressed);
                 compareImages(image, result);
             } catch (final ImageWriteException | ImageReadException | IOException ex) {
@@ -207,7 +208,7 @@ public class TiffCcittTest extends TiffBaseTest {
                 final TiffImagingParameters params = new TiffImagingParameters();
                 params.setCompression(TiffConstants.TIFF_COMPRESSION_CCITT_GROUP_3);
                 params.setT4Options(5);
-                final byte[] compressed = Imaging.writeImageToBytes(image, params);
+                final byte[] compressed = Imaging.writeImageToBytes(image, ImageFormats.TIFF, params);
                 final BufferedImage result = Imaging.getBufferedImage(compressed);
                 compareImages(image, result);
             } catch (final ImageWriteException | ImageReadException | IOException ex) {
@@ -218,7 +219,7 @@ public class TiffCcittTest extends TiffBaseTest {
             try {
                 final TiffImagingParameters params = new TiffImagingParameters();
                 params.setCompression(TiffConstants.TIFF_COMPRESSION_CCITT_GROUP_4);
-                final byte[] compressed = Imaging.writeImageToBytes(image, params);
+                final byte[] compressed = Imaging.writeImageToBytes(image, ImageFormats.TIFF, params);
                 final BufferedImage result = Imaging.getBufferedImage(compressed);
                 compareImages(image, result);
             } catch (final ImageWriteException | ImageReadException | IOException ex) {
diff --git a/src/test/java/org/apache/commons/imaging/formats/tiff/TiffRoundtripTest.java b/src/test/java/org/apache/commons/imaging/formats/tiff/TiffRoundtripTest.java
index 0e585c8..c2535a2 100644
--- a/src/test/java/org/apache/commons/imaging/formats/tiff/TiffRoundtripTest.java
+++ b/src/test/java/org/apache/commons/imaging/formats/tiff/TiffRoundtripTest.java
@@ -23,6 +23,7 @@ import java.awt.image.BufferedImage;
 import java.io.File;
 import java.util.List;
 
+import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageInfo;
 import org.apache.commons.imaging.Imaging;
 import org.apache.commons.imaging.common.ImageMetadata;
@@ -58,7 +59,7 @@ public class TiffRoundtripTest extends TiffBaseTest {
                 final File tempFile = File.createTempFile(imageFile.getName() + "-" + compression + ".", ".tif");
                 final TiffImagingParameters params = new TiffImagingParameters();
                 params.setCompression(compression);
-                Imaging.writeImage(image, tempFile, params);
+                Imaging.writeImage(image, tempFile, ImageFormats.TIFF, params);
                 final BufferedImage image2 = Imaging.getBufferedImage(tempFile);
                 assertNotNull(image2);
             }
diff --git a/src/test/java/org/apache/commons/imaging/formats/tiff/TiffSubImageTest.java b/src/test/java/org/apache/commons/imaging/formats/tiff/TiffSubImageTest.java
index 5b7e8af..9316f35 100644
--- a/src/test/java/org/apache/commons/imaging/formats/tiff/TiffSubImageTest.java
+++ b/src/test/java/org/apache/commons/imaging/formats/tiff/TiffSubImageTest.java
@@ -24,6 +24,7 @@ import java.io.File;
 import java.io.IOException;
 import java.util.List;
 
+import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageReadException;
 import org.apache.commons.imaging.ImageWriteException;
 import org.apache.commons.imaging.Imaging;
@@ -40,7 +41,7 @@ public class TiffSubImageTest extends TiffBaseTest {
     public void testSubImage() throws ImageReadException, ImageWriteException, IOException {
         final BufferedImage src = new BufferedImage(10, 10, BufferedImage.TYPE_INT_RGB);
         final TiffImagingParameters params = new TiffImagingParameters();
-        final byte[] imageBytes = Imaging.writeImageToBytes(src, params);
+        final byte[] imageBytes = Imaging.writeImageToBytes(src, ImageFormats.TIFF, params);
         params.setSubImageX(0);
         params.setSubImageY(0);
         params.setSubImageWidth(2);
diff --git a/src/test/java/org/apache/commons/imaging/formats/xmp/XmpUpdateTest.java b/src/test/java/org/apache/commons/imaging/formats/xmp/XmpUpdateTest.java
index 69574b9..ca30736 100644
--- a/src/test/java/org/apache/commons/imaging/formats/xmp/XmpUpdateTest.java
+++ b/src/test/java/org/apache/commons/imaging/formats/xmp/XmpUpdateTest.java
@@ -77,7 +77,7 @@ public class XmpUpdateTest extends ImagingTest {
             // ----
 
             params.setXmpXml(xmpXml);
-            Imaging.writeImage(image, tempFile, params);
+            Imaging.writeImage(image, tempFile, imageFormat, params);
 
             final String xmpXmlOut = Imaging.getXmpXml(tempFile);
 
diff --git a/src/test/java/org/apache/commons/imaging/roundtrip/NullParametersRoundtripTest.java b/src/test/java/org/apache/commons/imaging/roundtrip/NullParametersRoundtripTest.java
index a3e02c4..10fbe3c 100644
--- a/src/test/java/org/apache/commons/imaging/roundtrip/NullParametersRoundtripTest.java
+++ b/src/test/java/org/apache/commons/imaging/roundtrip/NullParametersRoundtripTest.java
@@ -38,7 +38,7 @@ public class NullParametersRoundtripTest extends RoundtripBase {
     public void testNullParametersRoundtrip(final FormatInfo formatInfo) throws Exception {
         final BufferedImage testImage = TestImages.createFullColorImage(1, 1);
         final File temp1 = File.createTempFile("nullParameters.", "." + formatInfo.format.getDefaultExtension());
-        Imaging.writeImage(testImage, temp1, null);
+        Imaging.writeImage(testImage, temp1, formatInfo.format, null);
         Imaging.getImageInfo(temp1, null);
         Imaging.getImageSize(temp1, null);
         Imaging.getMetadata(temp1, null);
diff --git a/src/test/java/org/apache/commons/imaging/roundtrip/PixelDensityRoundtrip.java b/src/test/java/org/apache/commons/imaging/roundtrip/PixelDensityRoundtrip.java
index 3e88dbe..aa4e14e 100644
--- a/src/test/java/org/apache/commons/imaging/roundtrip/PixelDensityRoundtrip.java
+++ b/src/test/java/org/apache/commons/imaging/roundtrip/PixelDensityRoundtrip.java
@@ -48,7 +48,7 @@ public class PixelDensityRoundtrip extends RoundtripBase {
         params.setImageFormat(formatInfo.format);
         final PixelDensity pixelDensity = PixelDensity.createFromPixelsPerInch(75, 150);
         params.setPixelDensity(pixelDensity);
-        Imaging.writeImage(testImage, temp1, params);
+        Imaging.writeImage(testImage, temp1, formatInfo.format, params);
 
         final ImageInfo imageInfo = Imaging.getImageInfo(temp1);
         if (imageInfo != null) {
diff --git a/src/test/java/org/apache/commons/imaging/roundtrip/RoundtripBase.java b/src/test/java/org/apache/commons/imaging/roundtrip/RoundtripBase.java
index 1905155..ec782b3 100644
--- a/src/test/java/org/apache/commons/imaging/roundtrip/RoundtripBase.java
+++ b/src/test/java/org/apache/commons/imaging/roundtrip/RoundtripBase.java
@@ -40,11 +40,11 @@ public class RoundtripBase {
                 + formatInfo.format.getDefaultExtension());
         Debug.debug("tempFile: " + temp1.getName());
 
-        final ImagingParameters params = new ImagingParameters();
+        final ImagingParameters params = formatInfo.format.createImagingParameters();
         params.setImageFormat(formatInfo.format);
-        Imaging.writeImage(testImage, temp1, params);
+        Imaging.writeImage(testImage, temp1, formatInfo.format, params);
 
-        final ImagingParameters readParams = new ImagingParameters();
+        final ImagingParameters readParams = formatInfo.format.createImagingParameters();
         readParams.setBufferedImageFactory(new RgbBufferedImageFactory());
         final BufferedImage image2 = Imaging.getBufferedImage(temp1, readParams);
         assertNotNull(image2);
@@ -58,7 +58,7 @@ public class RoundtripBase {
         if (formatInfo.identicalSecondWrite) {
             final File temp2 = File.createTempFile(tempPrefix + ".", "."
                     + formatInfo.format.getDefaultExtension());
-            Imaging.writeImage(image2, temp2, params);
+            Imaging.writeImage(image2, temp2, formatInfo.format, params);
 
             ImageAsserts.assertEquals(temp1, temp2);
         }