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 2022/01/26 19:27:30 UTC

svn commit: r1897513 - /pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/PDInlineImageTest.java

Author: tilman
Date: Wed Jan 26 19:27:30 2022
New Revision: 1897513

URL: http://svn.apache.org/viewvc?rev=1897513&view=rev
Log:
PDFBOX-5360: add test

Modified:
    pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/PDInlineImageTest.java

Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/PDInlineImageTest.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/PDInlineImageTest.java?rev=1897513&r1=1897512&r2=1897513&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/PDInlineImageTest.java (original)
+++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/PDInlineImageTest.java Wed Jan 26 19:27:30 2022
@@ -22,8 +22,8 @@ import static org.junit.jupiter.api.Asse
 import java.awt.Color;
 import java.awt.Paint;
 import java.awt.image.BufferedImage;
+import java.awt.image.DataBufferByte;
 import java.io.File;
-import java.io.FileOutputStream;
 import java.io.IOException;
 import javax.imageio.ImageIO;
 
@@ -36,7 +36,9 @@ import org.apache.pdfbox.pdmodel.PDDocum
 import org.apache.pdfbox.pdmodel.PDPage;
 import org.apache.pdfbox.pdmodel.PDPageContentStream;
 import org.apache.pdfbox.pdmodel.PDPageContentStream.AppendMode;
+import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceGray;
 import org.apache.pdfbox.rendering.PDFRenderer;
+import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 
@@ -120,22 +122,19 @@ class PDInlineImageTest
         assertEquals(height, image2.getHeight());
 
         // write and read
-        boolean writeOk = ImageIO.write(image1, "png",
-                new FileOutputStream(new File(TESTRESULTSDIR + "/inline-grid1.png")));
+        boolean writeOk = ImageIO.write(image1, "png", new File(TESTRESULTSDIR + "/inline-grid1.png"));
         assertTrue(writeOk);
         BufferedImage bim1 = ImageIO.read(new File(TESTRESULTSDIR + "/inline-grid1.png"));
         assertNotNull(bim1);
         assertEquals(width, bim1.getWidth());
         assertEquals(height, bim1.getHeight());
-        
-        writeOk = ImageIO.write(image2, "png",
-                new FileOutputStream(new File(TESTRESULTSDIR + "/inline-grid2.png")));
+
+        writeOk = ImageIO.write(image2, "png", new File(TESTRESULTSDIR + "/inline-grid2.png"));
         assertTrue(writeOk);
         BufferedImage bim2 = ImageIO.read(new File(TESTRESULTSDIR + "/inline-grid2.png"));
         assertNotNull(bim2);
         assertEquals(width, bim2.getWidth());
         assertEquals(height, bim2.getHeight());
-        
 
         // compare: pixels with even coordinates are white (FF), all others are black (0)
         for (int x = 0; x < width; ++x)
@@ -192,5 +191,66 @@ class PDInlineImageTest
             new PDFRenderer(document).renderImage(0);
         }
     }
-}
 
+    // 3 Tests for PDFBOX-5360 with very small images (the last one based on a comment 
+    // by Oliver Schmidtmer at the end of PDFBOX-5340). All images are fully black bars.
+
+    @Test
+    void testShortCCITT1() throws IOException
+    {
+        byte ba[] = new byte [] { 8, 0x10, 0x20, 0x40, (byte) 0x81, 2, 4, 8, 0x10, 0, 0x40, 4, 0, 0x40, 4, 0, 0x40, 4 };
+        doInlineCcittImage(23, 10, ba);
+    }
+
+    @Test
+    void testShortCCITT2() throws IOException
+    {
+        byte ba[] = new byte [] { 8, 0x10, 0x20, 0x40, (byte) 0x81, 2, 0, 8, 0, (byte) 0x80, 8, 8, (byte) 0x80, 8, 0, (byte) 0x80};
+        doInlineCcittImage(23, 7, ba);
+    }
+
+    @Test
+    void testShortCCITT3() throws IOException
+    {
+        byte ba[] = new byte [] { 103, 44, 103, 44, 103, 44, 103, 44, 0, 16, 1, 0, 16, 1, 0, 16, 1, 10};
+        doInlineCcittImage(683, 4, ba);
+    }
+
+    private void doInlineCcittImage(int width, int height, byte[] ba) throws IOException
+    {
+        COSDictionary dict = new COSDictionary();
+        dict.setInt(COSName.W, width);
+        dict.setInt(COSName.H, height);
+        dict.setInt(COSName.BPC, 1);
+        COSArray array = new COSArray();
+        array.add(COSInteger.ONE);
+        array.add(COSInteger.ZERO);
+        dict.setItem(COSName.D, array);
+        dict.setBoolean(COSName.IM, true);
+        dict.setItem(COSName.F, COSName.CCITTFAX_DECODE_ABBREVIATION);
+        COSDictionary dict2 = new COSDictionary();
+        dict2.setInt(COSName.COLUMNS, dict.getInt(COSName.W));
+        dict.setItem(COSName.DP, dict2);
+        PDInlineImage inlineImage = new PDInlineImage(dict, ba, null);
+        Assertions.assertEquals(true, inlineImage.isStencil());
+        Assertions.assertEquals(false, inlineImage.isEmpty());
+        Assertions.assertEquals(false, inlineImage.getInterpolate());
+        Assertions.assertEquals(dict, inlineImage.getCOSObject());
+        Assertions.assertEquals(PDDeviceGray.INSTANCE, inlineImage.getColorSpace());
+        Assertions.assertEquals(1, inlineImage.getBitsPerComponent());
+        Assertions.assertEquals("tiff", inlineImage.getSuffix());
+        BufferedImage bim = inlineImage.getImage();
+        Assertions.assertEquals(width, bim.getWidth());
+        Assertions.assertEquals(height, bim.getHeight());
+        Assertions.assertEquals(inlineImage.getWidth(), bim.getWidth());
+        Assertions.assertEquals(inlineImage.getHeight(), bim.getHeight());
+        Assertions.assertEquals(BufferedImage.TYPE_BYTE_GRAY, bim.getType());
+        DataBufferByte dbb = (DataBufferByte) bim.getRaster().getDataBuffer();
+        Assertions.assertEquals(bim.getWidth() * bim.getHeight(), dbb.getSize());
+        byte[] data = dbb.getData();
+        for (int i = 0; i < data.length; ++i)
+        {
+            Assertions.assertEquals(0, data[i]);
+        }
+    }
+}