You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by pv...@apache.org on 2018/07/10 07:35:41 UTC

nifi git commit: NIFI-5355 ResizeImage Fails to read PNG type on some OS's

Repository: nifi
Updated Branches:
  refs/heads/master f60585a9b -> 19636978f


NIFI-5355 ResizeImage Fails to read PNG type on some OS's

Signed-off-by: Pierre Villard <pi...@gmail.com>

This closes #2854.


Project: http://git-wip-us.apache.org/repos/asf/nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/nifi/commit/19636978
Tree: http://git-wip-us.apache.org/repos/asf/nifi/tree/19636978
Diff: http://git-wip-us.apache.org/repos/asf/nifi/diff/19636978

Branch: refs/heads/master
Commit: 19636978f9a2fe3a1d5e4e046c60d6ede530a25b
Parents: f60585a
Author: patricker <pa...@gmail.com>
Authored: Mon Jul 9 15:31:47 2018 -0600
Committer: Pierre Villard <pi...@gmail.com>
Committed: Tue Jul 10 09:35:30 2018 +0200

----------------------------------------------------------------------
 .../nifi/processors/image/ResizeImage.java      |  9 ++-
 .../nifi/processors/image/TestResizeImage.java  | 67 ++++++++++++++++++--
 2 files changed, 71 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/nifi/blob/19636978/nifi-nar-bundles/nifi-media-bundle/nifi-media-processors/src/main/java/org/apache/nifi/processors/image/ResizeImage.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-media-bundle/nifi-media-processors/src/main/java/org/apache/nifi/processors/image/ResizeImage.java b/nifi-nar-bundles/nifi-media-bundle/nifi-media-processors/src/main/java/org/apache/nifi/processors/image/ResizeImage.java
index 40c034b..7ddd640 100644
--- a/nifi-nar-bundles/nifi-media-bundle/nifi-media-processors/src/main/java/org/apache/nifi/processors/image/ResizeImage.java
+++ b/nifi-nar-bundles/nifi-media-bundle/nifi-media-processors/src/main/java/org/apache/nifi/processors/image/ResizeImage.java
@@ -19,6 +19,7 @@ package org.apache.nifi.processors.image;
 
 import java.awt.Graphics2D;
 import java.awt.Image;
+import java.awt.Transparency;
 import java.awt.image.BufferedImage;
 import java.io.BufferedInputStream;
 import java.io.IOException;
@@ -174,7 +175,13 @@ public class ResizeImage extends AbstractProcessor {
                         if (scaledImage instanceof BufferedImage) {
                             scaledBufferedImg = (BufferedImage) scaledImage;
                         } else {
-                            scaledBufferedImg = new BufferedImage(scaledImage.getWidth(null), scaledImage.getHeight(null), image.getType());
+                            // Determine image type, since calling image.getType may return 0
+                            int imageType = BufferedImage.TYPE_INT_ARGB;
+                            if(image.getTransparency() == Transparency.OPAQUE) {
+                                imageType = BufferedImage.TYPE_INT_RGB;
+                            }
+
+                            scaledBufferedImg = new BufferedImage(scaledImage.getWidth(null), scaledImage.getHeight(null), imageType);
                             final Graphics2D graphics = scaledBufferedImg.createGraphics();
                             try {
                                 graphics.drawImage(scaledImage, 0, 0, null);

http://git-wip-us.apache.org/repos/asf/nifi/blob/19636978/nifi-nar-bundles/nifi-media-bundle/nifi-media-processors/src/test/java/org/apache/nifi/processors/image/TestResizeImage.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-media-bundle/nifi-media-processors/src/test/java/org/apache/nifi/processors/image/TestResizeImage.java b/nifi-nar-bundles/nifi-media-bundle/nifi-media-processors/src/test/java/org/apache/nifi/processors/image/TestResizeImage.java
index 53bf17e..3e97740 100644
--- a/nifi-nar-bundles/nifi-media-bundle/nifi-media-processors/src/test/java/org/apache/nifi/processors/image/TestResizeImage.java
+++ b/nifi-nar-bundles/nifi-media-bundle/nifi-media-processors/src/test/java/org/apache/nifi/processors/image/TestResizeImage.java
@@ -44,14 +44,73 @@ public class TestResizeImage {
         runner.run();
 
         runner.assertAllFlowFilesTransferred(ResizeImage.REL_SUCCESS, 1);
+        MockFlowFile mff = runner.getFlowFilesForRelationship(ResizeImage.REL_SUCCESS).get(0);
+        byte[] data = mff.toByteArray();
+
+        BufferedImage img = ImageIO.read(new ByteArrayInputStream(data));
+        assertEquals(64, img.getWidth());
+        assertEquals(64, img.getHeight());
+        File out = new File("target/smooth.jpg");
+        ImageIO.write(img, "JPG", out);
+
+        runner.clearTransferState();
+
+        runner.setProperty(ResizeImage.SCALING_ALGORITHM, ResizeImage.RESIZE_FAST);
+
+        runner.enqueue(Paths.get("src/test/resources/simple.jpg"));
+        runner.run();
+
+        runner.assertAllFlowFilesTransferred(ResizeImage.REL_SUCCESS, 1);
+        mff = runner.getFlowFilesForRelationship(ResizeImage.REL_SUCCESS).get(0);
+        data = mff.toByteArray();
+
+        img = ImageIO.read(new ByteArrayInputStream(data));
+        assertEquals(64, img.getWidth());
+        assertEquals(64, img.getHeight());
+        out = new File("target/fast.jpg");
+        ImageIO.write(img, "JPG", out);
+    }
+
+    @Test
+    public void testEnlarge() throws IOException {
+        final TestRunner runner = TestRunners.newTestRunner(new ResizeImage());
+        runner.setProperty(ResizeImage.IMAGE_HEIGHT, "600");
+        runner.setProperty(ResizeImage.IMAGE_WIDTH, "600");
+        runner.setProperty(ResizeImage.SCALING_ALGORITHM, ResizeImage.RESIZE_SMOOTH);
+
+        runner.enqueue(Paths.get("src/test/resources/photoshop-8x12-32colors-alpha.gif"));
+        runner.run();
+
+        runner.assertAllFlowFilesTransferred(ResizeImage.REL_SUCCESS, 1);
+        MockFlowFile mff = runner.getFlowFilesForRelationship(ResizeImage.REL_SUCCESS).get(0);
+        byte[] data = mff.toByteArray();
+
+        BufferedImage img = ImageIO.read(new ByteArrayInputStream(data));
+        assertEquals(600, img.getWidth());
+        assertEquals(600, img.getHeight());
+        File out = new File("target/enlarge.png");
+        ImageIO.write(img, "PNG", out);
+    }
+
+
+    @Test
+    public void testResizePNG() throws IOException {
+        final TestRunner runner = TestRunners.newTestRunner(new ResizeImage());
+        runner.setProperty(ResizeImage.IMAGE_HEIGHT, "64");
+        runner.setProperty(ResizeImage.IMAGE_WIDTH, "64");
+        runner.setProperty(ResizeImage.SCALING_ALGORITHM, ResizeImage.RESIZE_SMOOTH);
+
+        runner.enqueue(Paths.get("src/test/resources/mspaint-8x10.png"));
+        runner.run();
+
+        runner.assertAllFlowFilesTransferred(ResizeImage.REL_SUCCESS, 1);
         final MockFlowFile mff = runner.getFlowFilesForRelationship(ResizeImage.REL_SUCCESS).get(0);
         final byte[] data = mff.toByteArray();
 
         final BufferedImage img = ImageIO.read(new ByteArrayInputStream(data));
         assertEquals(64, img.getWidth());
         assertEquals(64, img.getHeight());
-        final File out = new File("target/simple.jpg");
-        ImageIO.write(img, "JPG", out);
+        final File out = new File("target/mspaint-8x10resized.png");
+        ImageIO.write(img, "PNG", out);
     }
-
-}
+}
\ No newline at end of file