diff --git a/manual/Tasks/imageio.html b/manual/Tasks/imageio.html index cce503ca9..65d6815bd 100644 --- a/manual/Tasks/imageio.html +++ b/manual/Tasks/imageio.html @@ -29,7 +29,12 @@

Applies a chain of image operations on a set of files.

Uses AWT and ImageIO; replaces image task for Java 9+. The task can be used with Java 8 as well, see parameter table for limitations.

- +

Note: this task tries to stay as close as possible to syntax and semantics +of image task. However, it uses format attribute rather +than encoding attribute, because the latter is a misnomer: almost all tasks use similar +attributes for character encodings in files, file names or other strings. Also, +when format is not specified, its value is defined by the format of the first processed +image file.

Overview of used datatypes
Yes, unless nested fileset is used
- encoding + format Image format.

Valid (case insensitive) are: bmp, gif, jpeg, jpg, png, tif, tiff, wbmp (Java 8 VM lacks support for TIFF, which can be provided by external libraries). - No; defaults to the format of the first original file + No; defaults to the format of the (first) original file overwrite diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/image/ImageIOTask.java b/src/main/org/apache/tools/ant/taskdefs/optional/image/ImageIOTask.java index 5e4289c1e..ce25c3898 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/image/ImageIOTask.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/image/ImageIOTask.java @@ -20,6 +20,7 @@ package org.apache.tools.ant.taskdefs.optional.image; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; import org.apache.tools.ant.taskdefs.MatchingTask; +import org.apache.tools.ant.types.EnumeratedAttribute; import org.apache.tools.ant.types.FileSet; import org.apache.tools.ant.types.Mapper; import org.apache.tools.ant.types.optional.imageio.Draw; @@ -59,7 +60,7 @@ public class ImageIOTask extends MatchingTask { private File srcDir = null; private File destDir = null; - private String format; + private ImageFormat outputFormat; private boolean garbageCollect = false; @@ -93,11 +94,11 @@ public class ImageIOTask extends MatchingTask { } /** - * Set the image format. - * @param encoding the String image format. + * Set the output image format. + * @param format an ImageFormat. */ - public void setEncoding(String encoding) { - format = encoding; + public void setFormat(ImageFormat format) { + outputFormat = format; } /** @@ -281,8 +282,8 @@ public class ImageIOTask extends MatchingTask { return; } ImageReader reader = readers.next(); - if (format == null) { - format = reader.getFormatName(); + if (outputFormat == null) { + outputFormat = new ImageFormat(reader.getFormatName()); } reader.setInput(input); @@ -308,7 +309,7 @@ public class ImageIOTask extends MatchingTask { newFile.delete(); } - if (!ImageIO.write(image, format, newFile)) { + if (!ImageIO.write(image, outputFormat.getValue(), newFile)) { log("Failed to save the transformed file"); } } catch (IOException | RuntimeException err) { @@ -378,11 +379,33 @@ public class ImageIOTask extends MatchingTask { if (srcDir == null && destDir == null) { throw new BuildException("Specify the destDir, or the srcDir."); } - if (format != null && !Arrays.asList(ImageIO.getReaderFormatNames()).contains(format)) { - throw new BuildException("Unknown image format '" + format + "'" - + System.lineSeparator() + "Use any of " - + Arrays.stream(ImageIO.getReaderFormatNames()).sorted() - .collect(Collectors.joining(", "))); + } + + /** + * defines acceptable image formats. + */ + public static class ImageFormat extends EnumeratedAttribute { + + private static final String[] VALUES = ImageIO.getReaderFormatNames(); + + /** + * Constructor + */ + public ImageFormat() { + } + + /** + * Constructor using a string. + * @param value the value of the attribute + */ + public ImageFormat(String value) { + setValue(value); + } + + /** {@inheritDoc}. */ + @Override + public String[] getValues() { + return VALUES; } } }