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 2021/09/28 17:09:28 UTC
svn commit: r1893712 -
/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java
Author: tilman
Date: Tue Sep 28 17:09:27 2021
New Revision: 1893712
URL: http://svn.apache.org/viewvc?rev=1893712&view=rev
Log:
PDFBOX-4892: refactor
Modified:
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java
Modified: pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java?rev=1893712&r1=1893711&r2=1893712&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java (original)
+++ pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java Tue Sep 28 17:09:27 2021
@@ -27,7 +27,6 @@ import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.IOException;
-import java.io.OutputStream;
import java.util.Iterator;
import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
@@ -334,23 +333,21 @@ public final class JPEGFactory
private static PDImageXObject createJPEG(PDDocument document, BufferedImage image,
float quality, int dpi) throws IOException
{
- // extract alpha channel (if any)
BufferedImage awtColorImage = getColorImage(image);
- BufferedImage awtAlphaImage = getAlphaImage(image);
// create XObject
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- encodeImageToJPEGStream(awtColorImage, quality, dpi, baos);
- ByteArrayInputStream byteStream = new ByteArrayInputStream(baos.toByteArray());
-
- PDImageXObject pdImage = new PDImageXObject(document, byteStream,
- COSName.DCT_DECODE, awtColorImage.getWidth(), awtColorImage.getHeight(),
- 8,
+ byte[] encoded = encodeImageToJPEGStream(awtColorImage, quality, dpi);
+ ByteArrayInputStream encodedByteStream = new ByteArrayInputStream(encoded);
+
+ PDImageXObject pdImage = new PDImageXObject(document, encodedByteStream, COSName.DCT_DECODE,
+ awtColorImage.getWidth(), awtColorImage.getHeight(), 8,
getColorSpaceFromAWT(awtColorImage));
- // alpha -> soft mask
+ // extract alpha channel (if any)
+ BufferedImage awtAlphaImage = getAlphaImage(image);
if (awtAlphaImage != null)
{
+ // alpha -> soft mask
PDImage xAlpha = JPEGFactory.createFromImage(document, awtAlphaImage, quality);
pdImage.getCOSObject().setItem(COSName.SMASK, xAlpha);
}
@@ -379,14 +376,14 @@ public final class JPEGFactory
throw new IOException("No ImageWriter found for JPEG format");
}
- private static void encodeImageToJPEGStream(BufferedImage image, float quality, int dpi,
- OutputStream out) throws IOException
+ private static byte[] encodeImageToJPEGStream(BufferedImage image, float quality, int dpi) throws IOException
{
ImageWriter imageWriter = getJPEGImageWriter(); // find JAI writer
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageOutputStream ios = null;
try
{
- ios = ImageIO.createImageOutputStream(out);
+ ios = ImageIO.createImageOutputStream(baos);
imageWriter.setOutput(ios);
// add compression
@@ -396,21 +393,22 @@ public final class JPEGFactory
// add metadata
ImageTypeSpecifier imageTypeSpecifier = new ImageTypeSpecifier(image);
- IIOMetadata data = imageWriter.getDefaultImageMetadata(imageTypeSpecifier, jpegParam);
- Element tree = (Element)data.getAsTree("javax_imageio_jpeg_image_1.0");
- Element jfif = (Element)tree.getElementsByTagName("app0JFIF").item(0);
+ IIOMetadata metadata = imageWriter.getDefaultImageMetadata(imageTypeSpecifier, jpegParam);
+ Element tree = (Element) metadata.getAsTree("javax_imageio_jpeg_image_1.0");
+ Element jfif = (Element) tree.getElementsByTagName("app0JFIF").item(0);
String dpiString = Integer.toString(dpi);
jfif.setAttribute("Xdensity", dpiString);
jfif.setAttribute("Ydensity", dpiString);
jfif.setAttribute("resUnits", "1"); // 1 = dots/inch
// write
- imageWriter.write(data, new IIOImage(image, null, null), jpegParam);
+ imageWriter.write(metadata, new IIOImage(image, null, null), jpegParam);
+
+ return baos.toByteArray();
}
finally
{
// clean up
- IOUtils.closeQuietly(out);
if (ios != null)
{
ios.close();