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/25 19:42:16 UTC

svn commit: r1868950 - in /pdfbox/trunk/pdfbox/src: main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java test/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactoryTest.java

Author: tilman
Date: Fri Oct 25 19:42:16 2019
New Revision: 1868950

URL: http://svn.apache.org/viewvc?rev=1868950&view=rev
Log:
PDFBOX-4674: bpc is always 8 for jpeg files we encoded

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java
    pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactoryTest.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java?rev=1868950&r1=1868949&r2=1868950&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java Fri Oct 25 19:42:16 2019
@@ -269,7 +269,7 @@ public final class JPEGFactory
         
         PDImageXObject pdImage = new PDImageXObject(document, byteStream, 
                 COSName.DCT_DECODE, awtColorImage.getWidth(), awtColorImage.getHeight(), 
-                awtColorImage.getColorModel().getComponentSize(0),
+                8,
                 getColorSpaceFromAWT(awtColorImage));
 
         // alpha -> soft mask

Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactoryTest.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactoryTest.java?rev=1868950&r1=1868949&r2=1868950&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactoryTest.java (original)
+++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactoryTest.java Fri Oct 25 19:42:16 2019
@@ -215,6 +215,49 @@ public class JPEGFactoryTest extends Tes
         doWritePDF(document, ximage, testResultsDir, "jpeg-4bargb.pdf");
     }
 
+    /**
+     * Tests USHORT_555_RGB JPEGFactory#createFromImage(PDDocument document, BufferedImage
+     * image), see also PDFBOX-4674.
+     * @throws java.io.IOException
+     */
+    public void testCreateFromImageUSHORT_555_RGB() throws IOException
+    {
+        // workaround Open JDK bug
+        // http://bugs.java.com/bugdatabase/view_bug.do?bug_id=7044758
+        if (System.getProperty("java.runtime.name").equals("OpenJDK Runtime Environment")
+                && (System.getProperty("java.specification.version").equals("1.6")
+                || System.getProperty("java.specification.version").equals("1.7")
+                || System.getProperty("java.specification.version").equals("1.8")))
+        {
+            return;
+        }
+
+        PDDocument document = new PDDocument();
+        BufferedImage image = ImageIO.read(JPEGFactoryTest.class.getResourceAsStream("jpeg.jpg"));
+
+        // create an USHORT_555_RGB image
+        int width = image.getWidth();
+        int height = image.getHeight();
+        BufferedImage rgbImage = new BufferedImage(width, height, BufferedImage.TYPE_USHORT_555_RGB);
+        Graphics ag = rgbImage.getGraphics();
+        ag.drawImage(image, 0, 0, null);
+        ag.dispose();
+
+        for (int x = 0; x < rgbImage.getWidth(); ++x)
+        {
+            for (int y = 0; y < rgbImage.getHeight(); ++y)
+            {
+                rgbImage.setRGB(x, y, (rgbImage.getRGB(x, y) & 0xFFFFFF) | ((y / 10 * 10) << 24));
+            }
+        }
+
+        PDImageXObject ximage = JPEGFactory.createFromImage(document, rgbImage);
+        validate(ximage, 8, width, height, "jpg", PDDeviceRGB.INSTANCE.getName());
+        assertNull(ximage.getSoftMask());
+
+        doWritePDF(document, ximage, testResultsDir, "jpeg-ushort555rgb.pdf");
+    }
+
     // check whether it is possible to extract the jpeg stream exactly 
     // as it was passed to createFromStream
     private void checkJpegStream(File testResultsDir, String filename, InputStream resourceStream)