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