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]);
+ }
+ }
+}