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 2014/05/10 00:12:08 UTC
svn commit: r1593630 - in
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image:
ImageFactory.java JPEGFactory.java
Author: tilman
Date: Fri May 9 22:12:07 2014
New Revision: 1593630
URL: http://svn.apache.org/r1593630
Log:
PDFBOX-2067: throw exception for BITMASK transparency; moved getAlphaImage() up one level; optimized getColorImage() with ColorConvertOp
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/ImageFactory.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/ImageFactory.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/ImageFactory.java?rev=1593630&r1=1593629&r2=1593630&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/ImageFactory.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/ImageFactory.java Fri May 9 22:12:07 2014
@@ -24,7 +24,7 @@ import org.apache.pdfbox.pdmodel.graphic
import java.awt.color.ColorSpace;
import java.awt.color.ICC_ColorSpace;
import java.awt.image.BufferedImage;
-import java.awt.image.WritableRaster;
+import java.awt.image.ColorConvertOp;
/**
* An image factory.
@@ -75,19 +75,6 @@ class ImageFactory
}
}
- // returns the alpha channel of an image
- protected static BufferedImage getAlphaImage(BufferedImage image)
- {
- if (!image.getColorModel().hasAlpha())
- {
- return null;
- }
- WritableRaster alphaRaster = image.getAlphaRaster();
- BufferedImage alphaImage = new BufferedImage(alphaRaster.getWidth(), alphaRaster.getHeight(), BufferedImage.TYPE_BYTE_GRAY);
- alphaImage.setData(alphaRaster);
- return alphaImage;
- }
-
// returns the color channels of an image
protected static BufferedImage getColorImage(BufferedImage image)
{
@@ -100,22 +87,16 @@ class ImageFactory
{
throw new UnsupportedOperationException("only RGB color spaces are implemented");
}
- int width = image.getWidth();
- int height = image.getHeight();
// create an RGB image without alpha
//BEWARE: the previous solution in the history
// g.setComposite(AlphaComposite.Src) and g.drawImage()
// didn't work properly for TYPE_4BYTE_ABGR.
// alpha values of 0 result in a black dest pixel!!!
- BufferedImage rgbImage = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);
- for (int x = 0; x < width; ++x)
- {
- for (int y = 0; y < height; ++y)
- {
- rgbImage.setRGB(x, y, image.getRGB(x, y) & 0xFFFFFF);
- }
- }
- return rgbImage;
+ BufferedImage rgbImage = new BufferedImage(
+ image.getWidth(),
+ image.getHeight(),
+ BufferedImage.TYPE_3BYTE_BGR);
+ return new ColorConvertOp(null).filter(image, rgbImage);
}
}
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=1593630&r1=1593629&r2=1593630&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 May 9 22:12:07 2014
@@ -16,7 +16,9 @@
*/
package org.apache.pdfbox.pdmodel.graphics.image;
+import java.awt.Transparency;
import java.awt.image.BufferedImage;
+import java.awt.image.WritableRaster;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
@@ -30,7 +32,6 @@ import org.apache.pdfbox.pdmodel.PDDocum
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
-import org.apache.pdfbox.cos.COSStream;
import org.apache.pdfbox.util.ImageIOUtil;
/**
@@ -160,6 +161,23 @@ public final class JPEGFactory extends I
return createJPEG(document, image, quality, dpi);
}
+ // returns the alpha channel of an image
+ private static BufferedImage getAlphaImage(BufferedImage image) throws IOException
+ {
+ if (!image.getColorModel().hasAlpha())
+ {
+ return null;
+ }
+ if (image.getTransparency() == Transparency.BITMASK)
+ {
+ throw new UnsupportedOperationException("BITMASK Transparency JPEG compression is not useful, use LosslessImageFactory instead");
+ }
+ WritableRaster alphaRaster = image.getAlphaRaster();
+ BufferedImage alphaImage = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_BYTE_GRAY);
+ alphaImage.setData(alphaRaster);
+ return alphaImage;
+ }
+
// Creates an Image XObject from a Buffered Image using JAI Image I/O
private static PDImageXObject createJPEG(PDDocument document, BufferedImage image,
float quality, int dpi) throws IOException