[ 
https://issues.apache.org/jira/browse/PDFBOX-4205?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17045603#comment-17045603
 ] 

Constantine Dokolas commented on PDFBOX-4205:
---------------------------------------------

The following body to {{LosslessFactory.createFromGrayImage()}} works fine:
{code:java}
    int height = image.getHeight();
    int width = image.getWidth();
    int[] rgbLineBuffer = new int[width];
    int bpc = image.getColorModel().getPixelSize();
    ByteArrayOutputStream baos = new ByteArrayOutputStream(((width * bpc / 8) + 
(width * bpc % 8 != 0 ? 1 : 0)) * height);
    MemoryCacheImageOutputStream mcios = new MemoryCacheImageOutputStream(baos);
    WritableRaster r = image.getRaster();
    for (int y = 0; y < height; ++y) {
//      for (int pixel : image.getRGB(0, y, width, 1, rgbLineBuffer, 0, width))
      for (int pixel : r.getPixels(0, y, width, 1, rgbLineBuffer)) {
        mcios.writeBits(pixel & 0xFF, bpc);
      }

      int bitOffset = mcios.getBitOffset();
      if (bitOffset != 0) {
        mcios.writeBits(0, 8 - bitOffset);
      }
    }
    mcios.flush();
    mcios.close();
    return prepareImageXObject(document, baos.toByteArray(), image.getWidth(), 
image.getHeight(), bpc, PDDeviceGray.INSTANCE);
{code}

> LosslessFactory alters image
> ----------------------------
>
>                 Key: PDFBOX-4205
>                 URL: https://issues.apache.org/jira/browse/PDFBOX-4205
>             Project: PDFBox
>          Issue Type: Bug
>    Affects Versions: 2.0.7, 2.0.8, 2.0.9
>         Environment: Ubuntu 16.04
>            Reporter: Harry Dent
>            Priority: Minor
>         Attachments: image-2020-02-24-17-59-08-300.png, lossy.png, 
> picture_of_text.png
>
>
> The attached grayscale png becomes lighter when run through the following 
> code snippet: 
> {code:java}
> BufferedImage image = ImageIO.read(new File("picture_of_text.png"));
> PDImageXObject xObject = LosslessFactory.createFromImage(new PDDocument(), 
> image);
> BufferedImage lossy = xObject.getImage();
> ImageIO.write(lossy, "png", new File("lossy.png"));
> {code}
> The difference is easiest to spot by looking at the "S" in "41st". The loss 
> in quality occurs in {{createFromImage()}} (rather than {{getImage()}}), 
> which can be shown by embedding the {{PDImageXObject}} into a {{PDDocument}} 
> and then saving this document to a file. 
>  
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to