From commits-return-13100-archive-asf-public=cust-asf.ponee.io@pdfbox.apache.org Wed Sep 19 19:07:17 2018 Return-Path: X-Original-To: archive-asf-public@cust-asf.ponee.io Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx-eu-01.ponee.io (Postfix) with SMTP id E5320180621 for ; Wed, 19 Sep 2018 19:07:16 +0200 (CEST) Received: (qmail 8582 invoked by uid 500); 19 Sep 2018 17:07:16 -0000 Mailing-List: contact commits-help@pdfbox.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@pdfbox.apache.org Delivered-To: mailing list commits@pdfbox.apache.org Received: (qmail 8573 invoked by uid 99); 19 Sep 2018 17:07:15 -0000 Received: from Unknown (HELO svn01-us-west.apache.org) (209.188.14.144) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 19 Sep 2018 17:07:15 +0000 Received: from svn01-us-west.apache.org (localhost [127.0.0.1]) by svn01-us-west.apache.org (ASF Mail Server at svn01-us-west.apache.org) with ESMTP id 4DFE53A0042 for ; Wed, 19 Sep 2018 17:07:15 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1841354 - in /pdfbox/trunk/pdfbox/src: main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java test/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactoryTest.java Date: Wed, 19 Sep 2018 17:07:14 -0000 To: commits@pdfbox.apache.org From: tilman@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20180919170715.4DFE53A0042@svn01-us-west.apache.org> Author: tilman Date: Wed Sep 19 17:07:14 2018 New Revision: 1841354 URL: http://svn.apache.org/viewvc?rev=1841354&view=rev Log: PDFBOX-4184: keep ICC colorspace + set alternate colorspace, by Emmeran Seehuber Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactoryTest.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=1841354&r1=1841353&r2=1841354&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 Wed Sep 19 17:07:14 2018 @@ -60,11 +60,20 @@ public final class LosslessFactory } /** - * Creates a new lossless encoded Image XObject from a Buffered Image. + * Creates a new lossless encoded image XObject from a BufferedImage. + *

+ * New for advanced users from 2.0.12 on:
+ * If you created your image with a non standard ICC colorspace, it will be + * preserved. (If you load images in java using ImageIO then no need to read + * this segment) However a new colorspace will be created for each image. So + * if you create a PDF with several such images, consider replacing the + * colorspace with a common object to save space. This is done with + * {@link PDImageXObject#getColorSpace()} and + * {@link PDImageXObject#setColorSpace(org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace) PDImageXObject.setColorSpace()} * * @param document the document where the image will be created - * @param image the buffered image to embed - * @return a new Image XObject + * @param image the BufferedImage to embed + * @return a new image XObject * @throws IOException if something goes wrong */ public static PDImageXObject createFromImage(PDDocument document, BufferedImage image) @@ -572,6 +581,11 @@ public final class LosslessFactory } pdProfile.getPDStream().getCOSObject().setInt(COSName.N, srcCspace.getNumComponents()); + pdProfile.getPDStream().getCOSObject().setItem(COSName.ALTERNATE, + srcCspace.getType() == ColorSpace.TYPE_CMYK ? + COSName.DEVICECMYK : + COSName.DEVICERGB); + pdColorSpace = pdProfile; } } Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactoryTest.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactoryTest.java?rev=1841354&r1=1841353&r2=1841354&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactoryTest.java (original) +++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactoryTest.java Wed Sep 19 17:07:14 2018 @@ -431,21 +431,12 @@ public class LosslessFactoryTest extends BufferedImage imageCMYK = op.filter(image, null); PDImageXObject ximage = LosslessFactory.createFromImage(document, imageCMYK); - validate(ximage, 8, imageCMYK.getWidth(), imageCMYK.getHeight(), "png", PDDeviceCMYK.INSTANCE.getName()); + validate(ximage, 8, imageCMYK.getWidth(), imageCMYK.getHeight(), "png", "ICCBased"); doWritePDF(document, ximage, testResultsDir, "cmyk.pdf"); - - // The image in CMYK got color-truncated because the ISO_Coated colorspace is way smaller - // than the sRGB colorspace. The image is converted back to sRGB when calling PDImageXObject.getImage(). - // So to be able to check the image data we must also convert our CMYK Image back to sRGB - //BufferedImage compareImageRGB = new BufferedImage(imageCMYK.getWidth(), imageCMYK.getHeight(), - //BufferedImage.TYPE_INT_BGR); - //Graphics2D graphics = compareImageRGB.createGraphics(); - //graphics.drawImage(imageCMYK, 0, 0, null); - //graphics.dispose(); - //ImageIO.write(compareImageRGB, "TIFF", new File("/tmp/compare.tiff")); - //ImageIO.write(ximage.getImage(), "TIFF", new File("/tmp/compare2.tiff")); - //checkIdent(compareImageRGB, ximage.getImage()); + + // still slight difference of 1 color level + //checkIdent(imageCMYK, ximage.getImage()); } public void testCreateLosslessFrom16Bit() throws IOException