You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2019/10/24 02:49:09 UTC

svn commit: r1868835 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java

Author: tilman
Date: Thu Oct 24 02:49:09 2019
New Revision: 1868835

URL: http://svn.apache.org/viewvc?rev=1868835&view=rev
Log:
PDFBOX-4672: refactor

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java?rev=1868835&r1=1868834&r2=1868835&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java Thu Oct 24 02:49:09 2019
@@ -79,44 +79,57 @@ public final class LosslessFactory
     public static PDImageXObject createFromImage(PDDocument document, BufferedImage image)
             throws IOException
     {
-        if (image.getTransparency() == BufferedImage.OPAQUE &&
-                ((image.getType() == BufferedImage.TYPE_BYTE_GRAY && image.getColorModel().getPixelSize() <= 8)
-                || (image.getType() == BufferedImage.TYPE_BYTE_BINARY && image.getColorModel().getPixelSize() == 1)))
+        if (isGrayImage(image))
         {
             return createFromGrayImage(image, document);
         }
-        else
+
+        // We try to encode the image with predictor
+        if (usePredictorEncoder)
         {
-            // We try to encode the image with predictor
-            if (usePredictorEncoder)
+            PDImageXObject pdImageXObject = new PredictorEncoder(document, image).encode();
+            if (pdImageXObject != null)
             {
-                PDImageXObject pdImageXObject = new PredictorEncoder(document, image).encode();
-                if (pdImageXObject != null)
+                if (pdImageXObject.getColorSpace() == PDDeviceRGB.INSTANCE &&
+                    pdImageXObject.getBitsPerComponent() < 16 &&
+                    image.getWidth() * image.getHeight() <= 50 * 50)
                 {
-                    if (pdImageXObject.getColorSpace() == PDDeviceRGB.INSTANCE &&
-                        pdImageXObject.getBitsPerComponent() < 16 &&
-                        image.getWidth() * image.getHeight() <= 50 * 50)
+                    // also create classic compressed image, compare sizes
+                    PDImageXObject pdImageXObjectClassic = createFromRGBImage(image, document);
+                    if (pdImageXObjectClassic.getCOSObject().getLength() < 
+                        pdImageXObject.getCOSObject().getLength())
+                    {
+                        pdImageXObject.getCOSObject().close();
+                        return pdImageXObjectClassic;
+                    }
+                    else
                     {
-                        // also create classic compressed image, compare sizes
-                        PDImageXObject pdImageXObjectClassic = createFromRGBImage(image, document);
-                        if (pdImageXObjectClassic.getCOSObject().getLength() < 
-                            pdImageXObject.getCOSObject().getLength())
-                        {
-                            pdImageXObject.getCOSObject().close();
-                            return pdImageXObjectClassic;
-                        }
-                        else
-                        {
-                            pdImageXObjectClassic.getCOSObject().close();
-                        }
+                        pdImageXObjectClassic.getCOSObject().close();
                     }
-                    return pdImageXObject;
                 }
+                return pdImageXObject;
             }
+        }
+
+        // Fallback: We export the image as 8-bit sRGB and might loose color information
+        return createFromRGBImage(image, document);
+    }
 
-            // Fallback: We export the image as 8-bit sRGB and might loose color information
-            return createFromRGBImage(image, document);
+    private static boolean isGrayImage(BufferedImage image)
+    {
+        if (image.getTransparency() != BufferedImage.OPAQUE)
+        {
+            return false;
+        }
+        if (image.getType() == BufferedImage.TYPE_BYTE_GRAY && image.getColorModel().getPixelSize() <= 8)
+        {
+            return true;
+        }
+        if (image.getType() == BufferedImage.TYPE_BYTE_BINARY && image.getColorModel().getPixelSize() == 1)
+        {
+            return true;
         }
+        return false;
     }
 
     // grayscale images need one color per sample