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;