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:07 UTC
[commons-imaging] 07/24: [IMAGING-159] Add a method to create a parameter object, and a list of extensions to each format, and a default extension. Update 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 461d385212fa255f8e105af555fec9bf69769165
Author: Bruno P. Kinoshita <ki...@apache.org>
AuthorDate: Sat May 15 19:26:15 2021 +1200
[IMAGING-159] Add a method to create a parameter object, and a list of extensions to each format, and a default extension. Update tests.
---
.../org/apache/commons/imaging/ImageFormat.java | 6 +-
.../org/apache/commons/imaging/ImageFormats.java | 98 ++++++++++++++++------
.../imaging/formats/dcx/DcxImageParser.java | 9 +-
.../imaging/formats/jpeg/JpegImageParser.java | 3 +
.../common/bytesource/ByteSourceImageTest.java | 12 +--
.../commons/imaging/formats/xmp/XmpUpdateTest.java | 2 +-
.../roundtrip/NullParametersRoundtripTest.java | 2 +-
.../imaging/roundtrip/PixelDensityRoundtrip.java | 2 +-
.../commons/imaging/roundtrip/RoundtripBase.java | 5 +-
9 files changed, 97 insertions(+), 42 deletions(-)
diff --git a/src/main/java/org/apache/commons/imaging/ImageFormat.java b/src/main/java/org/apache/commons/imaging/ImageFormat.java
index c733432..d9b1724 100644
--- a/src/main/java/org/apache/commons/imaging/ImageFormat.java
+++ b/src/main/java/org/apache/commons/imaging/ImageFormat.java
@@ -16,6 +16,7 @@
*/
package org.apache.commons.imaging;
+
/**
* Simple image format interface.
*/
@@ -33,6 +34,9 @@ public interface ImageFormat {
*
* @return String extension
*/
- String getExtension();
+ String[] getExtensions();
+
+ String getDefaultExtension();
+ ImagingParameters createImagingParameters();
}
diff --git a/src/main/java/org/apache/commons/imaging/ImageFormats.java b/src/main/java/org/apache/commons/imaging/ImageFormats.java
index 2f10c2e..fdceaf2 100644
--- a/src/main/java/org/apache/commons/imaging/ImageFormats.java
+++ b/src/main/java/org/apache/commons/imaging/ImageFormats.java
@@ -16,32 +16,62 @@
*/
package org.apache.commons.imaging;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.apache.commons.imaging.formats.bmp.BmpImagingParameters;
+import org.apache.commons.imaging.formats.gif.GifImagingParameters;
+import org.apache.commons.imaging.formats.icns.IcnsImagingParameters;
+import org.apache.commons.imaging.formats.ico.IcoImagingParameters;
+import org.apache.commons.imaging.formats.jpeg.JpegImagingParameters;
+import org.apache.commons.imaging.formats.pcx.PcxImagingParameters;
+import org.apache.commons.imaging.formats.png.PngImagingParameters;
+import org.apache.commons.imaging.formats.pnm.PnmImagingParameters;
+import org.apache.commons.imaging.formats.psd.PsdImagingParameters;
+import org.apache.commons.imaging.formats.rgbe.RgbeImagingParameters;
+import org.apache.commons.imaging.formats.tiff.TiffImagingParameters;
+import org.apache.commons.imaging.formats.wbmp.WbmpImagingParameters;
+import org.apache.commons.imaging.formats.xbm.XbmImagingParameters;
+import org.apache.commons.imaging.formats.xpm.XpmImagingParameters;
+
/**
* Enum of known image formats.
*/
public enum ImageFormats implements ImageFormat {
- UNKNOWN,
- BMP,
- DCX,
- GIF,
- ICNS,
- ICO,
- JBIG2,
- JPEG,
- PAM,
- PSD,
- PBM,
- PGM,
- PNM,
- PPM,
- PCX,
- PNG,
- RGBE,
- TGA,
- TIFF,
- WBMP,
- XBM,
- XPM;
+ UNKNOWN(ImagingParameters.class),
+ BMP(BmpImagingParameters.class, "bmp", "dib"),
+ DCX(PcxImagingParameters.class, "dcx"),
+ GIF(GifImagingParameters.class, "gif"),
+ ICNS(IcnsImagingParameters.class, ""),
+ ICO(IcoImagingParameters.class, "ico"),
+ JBIG2(ImagingParameters.class),
+ JPEG(JpegImagingParameters.class, "jpg", "jpeg", "jpe", "jif", "jfif", "jfi"),
+ 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"),
+ PNG(PngImagingParameters.class, "png"),
+ RGBE(RgbeImagingParameters.class, "rgbe"),
+ TGA(ImagingParameters.class),
+ TIFF(TiffImagingParameters.class, "tiff", "tif"), // TODO: Or is it .tif the default one?
+ WBMP(WbmpImagingParameters.class, "wbmp"),
+ XBM(XbmImagingParameters.class, "xbm"),
+ XPM(XpmImagingParameters.class, "xpm");
+
+ private static final Logger LOGGER = Logger.getLogger(ImageFormats.class.getName());
+
+ private String[] extensions;
+ private Class<? extends ImagingParameters> parametersClass;
+
+ ImageFormats(Class<? extends ImagingParameters> parametersClass, String ...extensions) {
+ this.extensions = extensions;
+ this.parametersClass = parametersClass;
+ }
@Override
public String getName() {
@@ -49,7 +79,27 @@ public enum ImageFormats implements ImageFormat {
}
@Override
- public String getExtension() {
- return name();
+ public String[] getExtensions() {
+ return this.extensions.clone();
+ }
+
+ @Override
+ public String getDefaultExtension() {
+ return this.extensions[0];
+ }
+
+ @Override
+ public ImagingParameters createImagingParameters() {
+ if (this.parametersClass != null) {
+ Constructor<?> ctor;
+ try {
+ ctor = this.parametersClass.getConstructor();
+ return (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();
+ }
+ }
+ return null;
}
}
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 e4467a6..607f635 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,9 +42,10 @@ 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 = ".dcx";
- private static final String[] ACCEPTED_EXTENSIONS = { ".dcx", };
+ private static final String DEFAULT_EXTENSION = imageFormat.getDefaultExtension();
+ private static final String[] ACCEPTED_EXTENSIONS = imageFormat.getExtensions();
public DcxImageParser() {
super.setByteOrder(ByteOrder.LITTLE_ENDIAN);
@@ -67,9 +68,7 @@ public class DcxImageParser extends ImageParser<PcxImagingParameters> {
@Override
protected ImageFormat[] getAcceptedTypes() {
- return new ImageFormat[] {
- ImageFormats.DCX, //
- };
+ return new ImageFormat[] { ImageFormats.DCX };
}
// FIXME should throw UOE
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 e4bb582..b7e446f 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
@@ -359,6 +359,9 @@ public class JpegImageParser extends ImageParser<JpegImagingParameters> implemen
return null;
}
+ if (params == null) {
+ params = new JpegImagingParameters();
+ }
params.setReadThumbnails(Boolean.TRUE);
return (TiffImageMetadata) new TiffImageParser().getMetadata(bytes,
diff --git a/src/test/java/org/apache/commons/imaging/common/bytesource/ByteSourceImageTest.java b/src/test/java/org/apache/commons/imaging/common/bytesource/ByteSourceImageTest.java
index 943435c..a1aab34 100644
--- a/src/test/java/org/apache/commons/imaging/common/bytesource/ByteSourceImageTest.java
+++ b/src/test/java/org/apache/commons/imaging/common/bytesource/ByteSourceImageTest.java
@@ -40,6 +40,7 @@ import org.apache.commons.imaging.ImageReadException;
import org.apache.commons.imaging.Imaging;
import org.apache.commons.imaging.ImagingParameters;
import org.apache.commons.imaging.formats.jpeg.JpegImagingParameters;
+import org.apache.commons.imaging.formats.tiff.TiffImagingParameters;
import org.apache.commons.imaging.internal.Debug;
import org.apache.commons.io.FileUtils;
import org.junit.jupiter.params.ParameterizedTest;
@@ -160,15 +161,14 @@ public class ByteSourceImageTest extends ByteSourceTest {
public void checkGetImageInfo(final File imageFile, final byte[] imageFileBytes)
throws IOException, ImageReadException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException {
- final ImagingParameters params;
final boolean ignoreImageData = isPhilHarveyTestImage(imageFile);
final ImageFormat imageFormat = Imaging.guessFormat(imageFile);
- if (imageFormat.equals(ImageFormats.TIFF)
- || imageFormat.equals(ImageFormats.JPEG)) {
- params = new JpegImagingParameters();
+ final ImagingParameters params = imageFormat.createImagingParameters();
+ if (imageFormat == ImageFormats.TIFF) {
+ ((TiffImagingParameters) params).setReadThumbnails(Boolean.valueOf(!ignoreImageData));
+ }
+ if (imageFormat == ImageFormats.JPEG) {
((JpegImagingParameters) params).setReadThumbnails(Boolean.valueOf(!ignoreImageData));
- } else {
- params = new ImagingParameters();
}
final ImageInfo imageInfoFile = Imaging.getImageInfo(imageFile, params);
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 db12db0..69574b9 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
@@ -71,7 +71,7 @@ public class XmpUpdateTest extends ImagingTest {
}
final File tempFile = File.createTempFile(imageFile.getName() + ".", "."
- + imageFormat.getExtension());
+ + imageFormat.getDefaultExtension());
final BufferedImage image = Imaging.getBufferedImage(imageFile);
// ----
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 c5c4a0c..a3e02c4 100644
--- a/src/test/java/org/apache/commons/imaging/roundtrip/NullParametersRoundtripTest.java
+++ b/src/test/java/org/apache/commons/imaging/roundtrip/NullParametersRoundtripTest.java
@@ -37,7 +37,7 @@ public class NullParametersRoundtripTest extends RoundtripBase {
@MethodSource("data")
public void testNullParametersRoundtrip(final FormatInfo formatInfo) throws Exception {
final BufferedImage testImage = TestImages.createFullColorImage(1, 1);
- final File temp1 = File.createTempFile("nullParameters.", "." + formatInfo.format.getExtension());
+ final File temp1 = File.createTempFile("nullParameters.", "." + formatInfo.format.getDefaultExtension());
Imaging.writeImage(testImage, temp1, null);
Imaging.getImageInfo(temp1, null);
Imaging.getImageSize(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 dd1b102..3e88dbe 100644
--- a/src/test/java/org/apache/commons/imaging/roundtrip/PixelDensityRoundtrip.java
+++ b/src/test/java/org/apache/commons/imaging/roundtrip/PixelDensityRoundtrip.java
@@ -42,7 +42,7 @@ public class PixelDensityRoundtrip extends RoundtripBase {
final BufferedImage testImage = TestImages.createFullColorImage(2, 2);
final File temp1 = File.createTempFile("pixeldensity.", "."
- + formatInfo.format.getExtension());
+ + formatInfo.format.getDefaultExtension());
final ImagingParameters params = new ImagingParameters();
params.setImageFormat(formatInfo.format);
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 bff21f3..1905155 100644
--- a/src/test/java/org/apache/commons/imaging/roundtrip/RoundtripBase.java
+++ b/src/test/java/org/apache/commons/imaging/roundtrip/RoundtripBase.java
@@ -37,7 +37,7 @@ public class RoundtripBase {
final String tempPrefix, final boolean imageExact) throws IOException,
ImageReadException, ImageWriteException {
final File temp1 = File.createTempFile(tempPrefix + ".", "."
- + formatInfo.format.getExtension());
+ + formatInfo.format.getDefaultExtension());
Debug.debug("tempFile: " + temp1.getName());
final ImagingParameters params = new ImagingParameters();
@@ -57,8 +57,7 @@ public class RoundtripBase {
if (formatInfo.identicalSecondWrite) {
final File temp2 = File.createTempFile(tempPrefix + ".", "."
- + formatInfo.format.getExtension());
- // Debug.debug("tempFile: " + tempFile.getName());
+ + formatInfo.format.getDefaultExtension());
Imaging.writeImage(image2, temp2, params);
ImageAsserts.assertEquals(temp1, temp2);