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;