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 2020/01/07 20:09:56 UTC

svn commit: r1872459 - /pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/ExtractImages.java

Author: tilman
Date: Tue Jan  7 20:09:56 2020
New Revision: 1872459

URL: http://svn.apache.org/viewvc?rev=1872459&view=rev
Log:
PDFBOX-4734: create CCITT G4 compressed TIFF files when possible

Modified:
    pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/ExtractImages.java

Modified: pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/ExtractImages.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/ExtractImages.java?rev=1872459&r1=1872458&r2=1872459&view=diff
==============================================================================
--- pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/ExtractImages.java (original)
+++ pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/ExtractImages.java Tue Jan  7 20:09:56 2020
@@ -422,6 +422,24 @@ public final class ExtractImages
                         ImageIOUtil.writeImage(image, "jpeg2000", out);
                     }
                 }
+                else if ("tiff".equals(suffix) && pdImage.getColorSpace().equals(PDDeviceGray.INSTANCE))
+                {
+                    // CCITT compressed images can have a different colorspace, but this one is B/W
+                    // This is a bitonal image, so copy to TYPE_BYTE_BINARY
+                    // so that a G4 compressed TIFF image is created by ImageIOUtil.writeImage()
+                    int w = image.getWidth();
+                    int h = image.getHeight();
+                    BufferedImage bitonalImage = new BufferedImage(w, h, BufferedImage.TYPE_BYTE_BINARY);
+                    // copy image the old fashioned way - ColorConvertOp is slower!
+                    for (int y = 0; y < h; y++)
+                    {
+                        for (int x = 0; x < w; x++)
+                        {
+                            bitonalImage.setRGB(x, y, image.getRGB(x, y));
+                        }
+                    }
+                    ImageIOUtil.writeImage(bitonalImage, suffix, out);
+                }
                 else 
                 {
                     ImageIOUtil.writeImage(image, suffix, out);