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 2023/08/19 03:18:45 UTC
svn commit: r1911761 - in /pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox: cos/COSName.java filter/JPXFilter.java
Author: tilman
Date: Sat Aug 19 03:18:45 2023
New Revision: 1911761
URL: http://svn.apache.org/viewvc?rev=1911761&view=rev
Log:
PDFBOX-5657: return opaque image for JPEG2000 with SMaskInData
Modified:
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/filter/JPXFilter.java
Modified: pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java?rev=1911761&r1=1911760&r2=1911761&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java (original)
+++ pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java Sat Aug 19 03:18:45 2023
@@ -512,6 +512,7 @@ public final class COSName extends COSBa
public static final COSName SIZE = new COSName("Size");
public static final COSName SM = new COSName("SM");
public static final COSName SMASK = new COSName("SMask");
+ public static final COSName SMASK_IN_DATA = new COSName("SMaskInData");
public static final COSName SOFT_LIGHT = new COSName("SoftLight");
public static final COSName SORT = new COSName("Sort");
public static final COSName SOUND = new COSName("Sound");
Modified: pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/filter/JPXFilter.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/filter/JPXFilter.java?rev=1911761&r1=1911760&r2=1911761&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/filter/JPXFilter.java (original)
+++ pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/filter/JPXFilter.java Sat Aug 19 03:18:45 2023
@@ -16,6 +16,8 @@
*/
package org.apache.pdfbox.filter;
+import java.awt.Graphics2D;
+import java.awt.Transparency;
import java.awt.color.ColorSpace;
import java.awt.image.BufferedImage;
import java.awt.image.DataBuffer;
@@ -31,6 +33,10 @@ import javax.imageio.ImageReadParam;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
import javax.imageio.stream.MemoryCacheImageInputStream;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
import org.apache.pdfbox.cos.COSDictionary;
import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.pdmodel.graphics.color.PDJPXColorSpace;
@@ -52,6 +58,8 @@ import org.apache.pdfbox.pdmodel.graphic
*/
public final class JPXFilter extends Filter
{
+ private static final Log LOG = LogFactory.getLog(JPXFilter.class);
+
/**
* {@inheritDoc}
*/
@@ -170,6 +178,18 @@ public final class JPXFilter extends Fil
// in raster
result.setColorSpace(new PDJPXColorSpace(ColorSpace.getInstance(ColorSpace.CS_GRAY)));
}
+ else if (image.getTransparency() == Transparency.TRANSLUCENT &&
+ parameters.getInt(COSName.SMASK_IN_DATA) > 0)
+ {
+ LOG.warn("JPEG2000 SMaskInData is not supported, returning opaque image");
+ BufferedImage bim = new BufferedImage(
+ image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_RGB);
+ Graphics2D g2d = (Graphics2D) bim.getGraphics();
+ g2d.drawImage(image, 0, 0, null);
+ g2d.dispose();
+ image = bim;
+ result.setColorSpace(new PDJPXColorSpace(image.getColorModel().getColorSpace()));
+ }
else
{
result.setColorSpace(new PDJPXColorSpace(image.getColorModel().getColorSpace()));