XGC-128: Remove image transparency for PS
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/commons/trunk@1896317 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/xmlgraphics/ps/ImageEncodingHelper.java b/src/main/java/org/apache/xmlgraphics/ps/ImageEncodingHelper.java
index 576d93a..1a91882 100644
--- a/src/main/java/org/apache/xmlgraphics/ps/ImageEncodingHelper.java
+++ b/src/main/java/org/apache/xmlgraphics/ps/ImageEncodingHelper.java
@@ -19,6 +19,8 @@
package org.apache.xmlgraphics.ps;
+import java.awt.Color;
+import java.awt.Graphics2D;
import java.awt.color.ColorSpace;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
@@ -487,8 +489,18 @@
private final RenderedImage img;
- public RenderedImageEncoder(RenderedImage img) {
- this.img = img;
+ public RenderedImageEncoder(RenderedImage ri) {
+ if (ri instanceof BufferedImage && ((BufferedImage) ri).getType() == BufferedImage.TYPE_4BYTE_ABGR) {
+ BufferedImage convertedImg =
+ new BufferedImage(ri.getWidth(), ri.getHeight(), BufferedImage.TYPE_INT_RGB);
+ Graphics2D g = (Graphics2D) convertedImg.getGraphics();
+ g.setBackground(Color.WHITE);
+ g.clearRect(0, 0, ri.getWidth(), ri.getHeight());
+ g.drawImage((BufferedImage)ri, 0, 0, null);
+ g.dispose();
+ ri = convertedImg;
+ }
+ img = ri;
}
public void writeTo(OutputStream out) throws IOException {
diff --git a/src/test/java/org/apache/xmlgraphics/ps/FormGeneratorTestCase.java b/src/test/java/org/apache/xmlgraphics/ps/FormGeneratorTestCase.java
index 1754906..89ad8d4 100644
--- a/src/test/java/org/apache/xmlgraphics/ps/FormGeneratorTestCase.java
+++ b/src/test/java/org/apache/xmlgraphics/ps/FormGeneratorTestCase.java
@@ -21,9 +21,9 @@
import java.awt.Color;
import java.awt.Dimension;
+import java.awt.Graphics2D;
import java.awt.color.ColorSpace;
-
import java.awt.geom.Dimension2D;
import java.awt.image.BufferedImage;
@@ -100,4 +100,28 @@
//FlateDecode at DataSource so executed on page load rather than document load so viewer loads faster
Assert.assertTrue(test.contains("/DataSource form:Data /FlateDecode filter\n"));
}
+
+ @Test
+ public void testAlphaImage() throws IOException {
+ Assert.assertEquals(buildPSImage(BufferedImage.TYPE_4BYTE_ABGR), buildPSImage(BufferedImage.TYPE_INT_RGB));
+ }
+
+ private String buildPSImage(int type) throws IOException {
+ Dimension2D dimension = new Dimension2DDouble(1, 1);
+ BufferedImage im = new BufferedImage(1, 1, type);
+ Graphics2D g = (Graphics2D) im.getGraphics();
+ if (type == BufferedImage.TYPE_4BYTE_ABGR) {
+ g.setBackground(new Color(0, 0, 0, 0));
+ } else {
+ g.setBackground(Color.white);
+ }
+ g.clearRect(0, 0, im.getWidth(), im.getHeight());
+ g.drawImage(im, 0, 0, null);
+ g.dispose();
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ ImageFormGenerator formImageGen = new ImageFormGenerator("form", "title", dimension, im, false);
+ PSGenerator gen = new PSGenerator(out);
+ formImageGen.generate(gen);
+ return out.toString("utf-8");
+ }
}