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 2019/10/24 02:49:09 UTC
svn commit: r1868835 -
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java
Author: tilman
Date: Thu Oct 24 02:49:09 2019
New Revision: 1868835
URL: http://svn.apache.org/viewvc?rev=1868835&view=rev
Log:
PDFBOX-4672: refactor
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java?rev=1868835&r1=1868834&r2=1868835&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java Thu Oct 24 02:49:09 2019
@@ -79,44 +79,57 @@ public final class LosslessFactory
public static PDImageXObject createFromImage(PDDocument document, BufferedImage image)
throws IOException
{
- if (image.getTransparency() == BufferedImage.OPAQUE &&
- ((image.getType() == BufferedImage.TYPE_BYTE_GRAY && image.getColorModel().getPixelSize() <= 8)
- || (image.getType() == BufferedImage.TYPE_BYTE_BINARY && image.getColorModel().getPixelSize() == 1)))
+ if (isGrayImage(image))
{
return createFromGrayImage(image, document);
}
- else
+
+ // We try to encode the image with predictor
+ if (usePredictorEncoder)
{
- // We try to encode the image with predictor
- if (usePredictorEncoder)
+ PDImageXObject pdImageXObject = new PredictorEncoder(document, image).encode();
+ if (pdImageXObject != null)
{
- PDImageXObject pdImageXObject = new PredictorEncoder(document, image).encode();
- if (pdImageXObject != null)
+ if (pdImageXObject.getColorSpace() == PDDeviceRGB.INSTANCE &&
+ pdImageXObject.getBitsPerComponent() < 16 &&
+ image.getWidth() * image.getHeight() <= 50 * 50)
{
- if (pdImageXObject.getColorSpace() == PDDeviceRGB.INSTANCE &&
- pdImageXObject.getBitsPerComponent() < 16 &&
- image.getWidth() * image.getHeight() <= 50 * 50)
+ // also create classic compressed image, compare sizes
+ PDImageXObject pdImageXObjectClassic = createFromRGBImage(image, document);
+ if (pdImageXObjectClassic.getCOSObject().getLength() <
+ pdImageXObject.getCOSObject().getLength())
+ {
+ pdImageXObject.getCOSObject().close();
+ return pdImageXObjectClassic;
+ }
+ else
{
- // also create classic compressed image, compare sizes
- PDImageXObject pdImageXObjectClassic = createFromRGBImage(image, document);
- if (pdImageXObjectClassic.getCOSObject().getLength() <
- pdImageXObject.getCOSObject().getLength())
- {
- pdImageXObject.getCOSObject().close();
- return pdImageXObjectClassic;
- }
- else
- {
- pdImageXObjectClassic.getCOSObject().close();
- }
+ pdImageXObjectClassic.getCOSObject().close();
}
- return pdImageXObject;
}
+ return pdImageXObject;
}
+ }
+
+ // Fallback: We export the image as 8-bit sRGB and might loose color information
+ return createFromRGBImage(image, document);
+ }
- // Fallback: We export the image as 8-bit sRGB and might loose color information
- return createFromRGBImage(image, document);
+ private static boolean isGrayImage(BufferedImage image)
+ {
+ if (image.getTransparency() != BufferedImage.OPAQUE)
+ {
+ return false;
+ }
+ if (image.getType() == BufferedImage.TYPE_BYTE_GRAY && image.getColorModel().getPixelSize() <= 8)
+ {
+ return true;
+ }
+ if (image.getType() == BufferedImage.TYPE_BYTE_BINARY && image.getColorModel().getPixelSize() == 1)
+ {
+ return true;
}
+ return false;
}
// grayscale images need one color per sample