Uploaded image for project: 'PDFBox'
  1. PDFBox
  2. PDFBOX-4184

[PATCH]: Support simple lossless compression of 16 bit RGB images



    • Improvement
    • Status: Closed
    • Minor
    • Resolution: Fixed
    • 2.0.9
    • 2.0.12, 3.0.0 PDFBox
    • Writing
    • None
    • Patch


      The attached patch add support to write 16 bit per component images correctly. I've integrated a test for this here: https://github.com/rototor/pdfbox-graphics2d/commit/8bf089cb74945bd4f0f15054754f51dd5b361fe9

      It only supports 16-Bit TYPE_CUSTOM with DataType == USHORT images - but this is what you usually get when you read a 16 bit PNG file.

      This would also fix https://github.com/danfickle/openhtmltopdf/issues/173.

      The patch is against 2.0.9, but should apply to 3.0.0 too.

      There is still some room for improvements when writing lossless images, as the images are currently not efficiently encoded. I.e. you could use PNG encodings to get a better compression. (By adding a COSName.DECODE_PARMS with a COSName.PREDICTOR == 15 and encoding the images as PNG). But this is something for a later patch. It would also need another API, as there is a tradeoff speed vs compression ratio. 


        1. size_compare.txt
          308 kB
          Emmeran Seehuber
        2. png16-arrow-good-no-mask.pdf
          2 kB
          Tilman Hausherr
        3. png16-arrow-good.pdf
          2 kB
          Tilman Hausherr
        4. png16-arrow-bad-no-smask.pdf
          1 kB
          Tilman Hausherr
        5. png16-arrow-bad.pdf
          1 kB
          Tilman Hausherr
        6. pdfbox_support_16bit_image_write.patch
          5 kB
          Emmeran Seehuber
        7. lossless_predictor_based_imageencoding.patch
          24 kB
          Emmeran Seehuber
        8. lossless_predictor_based_imageencoding_v6.patch
          48 kB
          Emmeran Seehuber
        9. lossless_predictor_based_imageencoding_v5.patch
          52 kB
          Emmeran Seehuber
        10. lossless_predictor_based_imageencoding_v4.patch
          35 kB
          Emmeran Seehuber
        11. lossless_predictor_based_imageencoding_v3.patch
          37 kB
          Emmeran Seehuber
        12. lossless_predictor_based_imageencoding_v2.patch
          26 kB
          Emmeran Seehuber
        13. LoadGovdocs.java
          7 kB
          Tilman Hausherr
        14. images.zip
          4.16 MB
          Tilman Hausherr
        15. fix_profile_use4.patch
          3 kB
          Emmeran Seehuber
        16. fix_profile_use3.patch
          3 kB
          Emmeran Seehuber
        17. fix_profile_use.patch
          0.7 kB
          Emmeran Seehuber
        18. 16bit.png
          0.6 kB
          Tilman Hausherr
        19. 032163.jpg
          3 kB
          Tim Allison

        Issue Links



              tilman Tilman Hausherr
              rototor Emmeran Seehuber
              1 Vote for this issue
              4 Start watching this issue