Author: tilman
Date: Mon Sep 7 08:13:52 2026
New Revision: 1937949
Log:
PDFBOX-5876: add test for PDFBOX-5657
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDImageXObject.java
pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/PDImageXObjectTest.java
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDImageXObject.java
==============================================================================
---
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDImageXObject.java
Mon Sep 7 08:05:49 2026 (r1937948)
+++
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDImageXObject.java
Mon Sep 7 08:13:52 2026 (r1937949)
@@ -84,6 +84,9 @@ public final class PDImageXObject extend
private boolean jpxValuesInitialized = false;
private BufferedImage jpxSMask = null;
+ // PDFBOX-5876: upper bound for the subsampling used by initJPXValues
method.
+ private static final int JPX_METADATA_SUBSAMPLING = 8;
+
/**
* current resource dictionary (has color spaces)
*/
@@ -1067,4 +1070,14 @@ public final class PDImageXObject extend
{
getCOSObject().setItem(COSName.OC, oc);
}
+
+ /**
+ * Use for tests only.
+ *
+ * @return
+ */
+ BufferedImage getJpxSMask()
+ {
+ return jpxSMask;
+ }
}
Modified:
pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/PDImageXObjectTest.java
==============================================================================
---
pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/PDImageXObjectTest.java
Mon Sep 7 08:05:49 2026 (r1937948)
+++
pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/PDImageXObjectTest.java
Mon Sep 7 08:13:52 2026 (r1937949)
@@ -24,6 +24,8 @@ import java.awt.image.ColorModel;
import java.awt.image.WritableRaster;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
import java.io.ByteArrayInputStream;
import java.io.File;
@@ -34,6 +36,9 @@ import java.net.URISyntaxException;
import javax.imageio.ImageIO;
import org.apache.pdfbox.pdmodel.PDDocument;
+import org.apache.pdfbox.Loader;
+import org.apache.pdfbox.cos.COSName;
+
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.parallel.Execution;
import org.junit.jupiter.api.parallel.ExecutionMode;
@@ -257,6 +262,26 @@ class PDImageXObjectTest
}
}
+ /**
+ * PDFBOX-5657: test SMaskInData feature.
+ *
+ * @throws IOException
+ */
+ @Test
+ void testJPXSMaskInData() throws IOException
+ {
+ PDDocument doc = Loader.loadPDF(new
File("target/pdfs","PDFBOX-5657-PDFJS-16782-SMaskInData.pdf"));
+ PDImageXObject img = (PDImageXObject)
doc.getPage(0).getResources().getXObject(COSName.getPDFName("image"));
+ assertTrue(img.getCOSObject().getInt(COSName.SMASK_IN_DATA) > 0);
+ assertNull(img.getMask());
+ assertNull(img.getSoftMask());
+ assertEquals(3,
img.getOpaqueImage().getColorModel().getNumComponents());
+ assertEquals(4, img.getImage().getColorModel().getNumComponents());
+ BufferedImage jpxSMask = img.getJpxSMask();
+ assertEquals(1258, jpxSMask.getWidth());
+ assertEquals(711, jpxSMask.getHeight());
+ }
+
private void testCompareCreateByContentWithCreatedByCCITTFactory(String
filename)
throws IOException, URISyntaxException
{