# HG changeset patch # User František Kučera # Date 1416253118 -3600 # Node ID 93fa6ce675e5350d62e84bedb4f20bd40ba88947 # Parent dec0dd934a64058fa9620b1e99868d2994a6d35d wasResized is decided in SingleImageResizer diff -r dec0dd934a64 -r 93fa6ce675e5 java/copy-image-resizer/src/cz/frantovo/copyImageResizer/RecursiveImageResizer.java --- a/java/copy-image-resizer/src/cz/frantovo/copyImageResizer/RecursiveImageResizer.java Mon Nov 17 20:23:58 2014 +0100 +++ b/java/copy-image-resizer/src/cz/frantovo/copyImageResizer/RecursiveImageResizer.java Mon Nov 17 20:38:38 2014 +0100 @@ -18,18 +18,15 @@ package cz.frantovo.copyImageResizer; import cz.frantovo.copyImageResizer.SingleImageResizer.ImageFormat; -import java.awt.image.BufferedImage; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; -import java.io.InputStream; import java.nio.channels.FileChannel; import java.util.logging.Level; import java.util.logging.LogRecord; import java.util.logging.Logger; -import javax.imageio.ImageIO; /** * @@ -70,16 +67,16 @@ File sizeRoot = new File(options.getOutput(), size.getDirectory()); File outputFile = new File(sizeRoot, inputFileRelative.getPath()); try (FileInputStream input = new FileInputStream(inputFile)) { - BufferedImage image = readImage(input); - if (shouldResize(image, size)) { - try (FileOutputStream output = new FileOutputStream(outputFile)) { - resizer.resize(image, output, size, format); + + try (FileOutputStream output = new FileOutputStream(outputFile)) { + boolean wasResized = resizer.resize(input, output, size, format); + if (wasResized) { counters.increment(Counters.COUNTER_TYPE.RESIZED); + } else { + log.log(Level.FINER, "File: {0} has already required (or smaller) size → just copy", inputFileRelative); + justCopy(inputFile, outputFile); + counters.increment(Counters.COUNTER_TYPE.JUST_COPIED); } - } else { - log.log(Level.FINER, "File: {0} has already required (or smaller) size → just copy", inputFileRelative); - justCopy(inputFile, outputFile); - counters.increment(Counters.COUNTER_TYPE.JUST_COPIED); } } } @@ -91,22 +88,6 @@ } } - private static boolean shouldResize(BufferedImage input, SizeSpecification requested) { - if (requested.isResizeSmaller()) { - return input.getHeight() != requested.getHeight() || input.getWidth() != requested.getWidth(); - } else { - return input.getHeight() > requested.getHeight() || input.getWidth() > requested.getWidth(); - } - } - - private static BufferedImage readImage(InputStream input) throws ResizeException { - try { - return ImageIO.read(input); - } catch (IOException e) { - throw new ResizeException("Unable to read image from stream", e); - } - } - private static void justCopy(File inputFile, File outputFile) throws ResizeException { try { diff -r dec0dd934a64 -r 93fa6ce675e5 java/copy-image-resizer/src/cz/frantovo/copyImageResizer/SingleImageResizer.java --- a/java/copy-image-resizer/src/cz/frantovo/copyImageResizer/SingleImageResizer.java Mon Nov 17 20:23:58 2014 +0100 +++ b/java/copy-image-resizer/src/cz/frantovo/copyImageResizer/SingleImageResizer.java Mon Nov 17 20:38:38 2014 +0100 @@ -20,6 +20,7 @@ import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.IOException; +import java.io.InputStream; import java.io.OutputStream; import java.util.logging.Level; import java.util.logging.Logger; @@ -34,11 +35,27 @@ private static final Logger log = Logger.getLogger(SingleImageResizer.class.getName()); - public void resize(BufferedImage input, OutputStream output, SizeSpecification size, ImageFormat outputFormat) throws ResizeException { + /** + * + * @param input + * @param output + * @param size + * @param outputFormat + * @return whether image was resized → if false, you should just copy the image after calling + * this method. Image is resized if larger than requested size or if {@linkplain SizeSpecification#isResizeSmaller() + * }. + * @throws ResizeException + */ + public boolean resize(InputStream input, OutputStream output, SizeSpecification size, ImageFormat outputFormat) throws ResizeException { try { - BufferedImage resized = resize(input, size.getWidth(), size.getHeight(), input.getType()); - - ImageIO.write(resized, outputFormat.getFormat(), output); + BufferedImage image = readImage(input); + if (shouldResize(image, size)) { + BufferedImage resized = resize(image, size.getWidth(), size.getHeight(), image.getType()); + ImageIO.write(resized, outputFormat.getFormat(), output); + return true; + } else { + return false; + } } catch (IOException e) { throw new ResizeException("Error while resizing image", e); } @@ -71,6 +88,22 @@ return resized; } + private static BufferedImage readImage(InputStream input) throws ResizeException { + try { + return ImageIO.read(input); + } catch (IOException e) { + throw new ResizeException("Unable to read image from stream", e); + } + } + + private static boolean shouldResize(BufferedImage input, SizeSpecification requested) { + if (requested.isResizeSmaller()) { + return input.getHeight() != requested.getHeight() || input.getWidth() != requested.getWidth(); + } else { + return input.getHeight() > requested.getHeight() || input.getWidth() > requested.getWidth(); + } + } + public static enum ImageFormat { JPEG("jpg", Pattern.compile(".*\\.(jpg|jpeg)$", Pattern.CASE_INSENSITIVE)),