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 2018/10/08 15:59:59 UTC
svn commit: r1843167 -
/pdfbox/branches/2.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/ValidateXImage.java
Author: tilman
Date: Mon Oct 8 15:59:59 2018
New Revision: 1843167
URL: http://svn.apache.org/viewvc?rev=1843167&view=rev
Log:
PDFBOX-4163: save ARGB images into jpeg only when supported; optimize writing
Modified:
pdfbox/branches/2.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/ValidateXImage.java
Modified: pdfbox/branches/2.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/ValidateXImage.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/ValidateXImage.java?rev=1843167&r1=1843166&r2=1843167&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/ValidateXImage.java (original)
+++ pdfbox/branches/2.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/ValidateXImage.java Mon Oct 8 15:59:59 2018
@@ -16,12 +16,14 @@
package org.apache.pdfbox.pdmodel.graphics.image;
import java.awt.image.BufferedImage;
-import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
+import java.io.OutputStream;
import java.util.HashSet;
import java.util.Set;
import javax.imageio.ImageIO;
+import javax.imageio.ImageWriter;
+import javax.imageio.spi.ImageWriterSpi;
import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.cos.COSStream;
import org.apache.pdfbox.pdmodel.PDDocument;
@@ -61,13 +63,33 @@ public class ValidateXImage
assertEquals(ximage.getWidth(), ximage.getImage().getWidth());
assertEquals(ximage.getHeight(), ximage.getImage().getHeight());
- boolean writeOk = ImageIO.write(ximage.getImage(),
- format, new ByteArrayOutputStream());
- assertTrue(writeOk);
- writeOk = ImageIO.write(ximage.getOpaqueImage(),
- format, new ByteArrayOutputStream());
+ boolean canEncode = true;
+ boolean writeOk;
+ // jdk11+ no longer encodes ARGB jpg
+ // https://bugs.openjdk.java.net/browse/JDK-8211748
+ if ("jpg".equals(format) &&
+ ximage.getImage().getType() == BufferedImage.TYPE_INT_ARGB)
+ {
+ ImageWriter writer = ImageIO.getImageWritersBySuffix(format).next();
+ ImageWriterSpi originatingProvider = writer.getOriginatingProvider();
+ canEncode = originatingProvider.canEncodeImage(ximage.getImage());
+ }
+ if (canEncode)
+ {
+ writeOk = ImageIO.write(ximage.getImage(), format, new NullOutputStream());
+ assertTrue(writeOk);
+ }
+ writeOk = ImageIO.write(ximage.getOpaqueImage(), format, new NullOutputStream());
assertTrue(writeOk);
}
+
+ private static class NullOutputStream extends OutputStream
+ {
+ @Override
+ public void write(int b) throws IOException
+ {
+ }
+ }
static int colorCount(BufferedImage bim)
{