You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by le...@apache.org on 2011/12/01 10:41:34 UTC

svn commit: r1209015 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDJpeg.java

Author: lehmi
Date: Thu Dec  1 09:41:33 2011
New Revision: 1209015

URL: http://svn.apache.org/viewvc?rev=1209015&view=rev
Log:
PDFBOX-1169: save the unfiltered image data, as XObjectImages using a DCTFilter don't have to be automatically JPEGs

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDJpeg.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDJpeg.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDJpeg.java?rev=1209015&r1=1209014&r2=1209015&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDJpeg.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDJpeg.java Thu Dec  1 09:41:33 2011
@@ -71,6 +71,7 @@ import org.apache.pdfbox.pdmodel.graphic
  */
 public class PDJpeg extends PDXObjectImage
 {
+    private BufferedImage image = null;
 
     private static final String JPG = "jpg";
 
@@ -241,11 +242,16 @@ public class PDJpeg extends PDXObjectIma
      * {@inheritDoc}
      */
     public BufferedImage getRGBImage() throws IOException
-    {   //TODO PKOCH
+    {   
+        if (image != null)
+        {
+            return image;
+        }
+        
         BufferedImage bi = null;
         boolean readError = false;
         ByteArrayOutputStream os = new ByteArrayOutputStream();
-        write2OutputStream(os);
+        removeAllFiltersButDCT(os);
         os.close();
         byte[] img = os.toByteArray();
         
@@ -302,13 +308,14 @@ public class PDJpeg extends PDXObjectIma
             CompositeImage compositeImage = new CompositeImage(bi, smaskBI);
             BufferedImage rgbImage = compositeImage.createMaskedImage(decodeArray);
 
-            return rgbImage;
+            image = rgbImage;
         }
         else
         {
             // But if there is no soft mask, use the unaltered image.
-            return bi;
+            image = bi;
         }
+        return image;
     }
 
     /**
@@ -317,6 +324,16 @@ public class PDJpeg extends PDXObjectIma
      */
     public void write2OutputStream(OutputStream out) throws IOException
     {
+        getRGBImage();
+        if (image != null) 
+        {
+            ImageIO.write(image, JPG, out);
+        }
+
+    }
+
+    private void removeAllFiltersButDCT(OutputStream out) throws IOException
+    {
         InputStream data = getPDStream().getPartiallyFilteredStream( DCT_FILTERS );
         byte[] buf = new byte[1024];
         int amountRead = -1;