From 2131ad46706704e7f378374fa488938db33ba8ee Mon Sep 17 00:00:00 2001 From: "James R. Barlow" Date: Fri, 27 Apr 2018 17:21:01 -0700 Subject: [PATCH] Fix --remove-background error on PDFs with colormapped images It's unclear how exactly a colormapped image gets to this spot given the tendency of other image processing tools to flatten such images, but someone made it happen, so now we make sure the image is okay. Closes #262 --- src/ocrmypdf/leptonica.py | 33 ++++++++++++------------- src/ocrmypdf/lib/_leptonica.py | 9 ++++--- src/ocrmypdf/lib/compile_leptonica.py | 23 +++++++++++++++++ tests/resources/README.rst | 1 + tests/resources/baiona-colormapped.png | Bin 0 -> 54170 bytes tests/test_lept.py | 30 ++++++++++++++++++++++ 6 files changed, 75 insertions(+), 21 deletions(-) create mode 100644 tests/resources/baiona-colormapped.png create mode 100644 tests/test_lept.py diff --git a/src/ocrmypdf/leptonica.py b/src/ocrmypdf/leptonica.py index 6ee9747e..26abd32f 100644 --- a/src/ocrmypdf/leptonica.py +++ b/src/ocrmypdf/leptonica.py @@ -108,13 +108,6 @@ class LeptonicaIOError(LeptonicaError): pass -class RemoveColormap(Enum): - to_binary = 0 - to_grayscale = 1 - to_full_color = 2 - based_on_src = 3 - - class Pix: """Wrapper around leptonica's PIX object. @@ -141,9 +134,10 @@ class Pix: def __repr__(self): if self._pix: - s = "" + s = "" return s.format(self._pix.w, self._pix.h, self._pix.d, - int(ffi.cast("intptr_t", self._pix))) + int(ffi.cast('intptr_t', self._pix)), + '(colormapped)' if self._pix.colormap else '') else: return "" @@ -328,13 +322,16 @@ class Pix: return None def remove_colormap(self, removal_type): - """Remove a palette + """Remove a palette (colormap); if no colormap, returns a copy of this + image + + removal_type - any of lept.REMOVE_CMAP_* - removal_type - RemovalColormap() """ - - with LeptonicaErrorTrap(): - return Pix(lept.pixRemoveColormap(self._pix, removal_type)) + return self + # with LeptonicaErrorTrap(): + # return Pix(lept.pixRemoveColormapGeneral( + # self._pix, removal_type, lept.L_COPY)) def otsu_adaptive_threshold( self, tile_size=(300, 300), kernel_size=(4, 4), scorefract=0.1): @@ -426,9 +423,11 @@ class Pix: def background_norm( self, mask=None, grayscale=None, tile_size=(10, 15), fg_threshold=60, min_count=40, bg_val=200, smooth_kernel=(2, 1)): + # Background norm doesn't work on color mapped Pix, so remove colormap + target_pix = self.remove_colormap(lept.REMOVE_CMAP_BASED_ON_SRC) with LeptonicaErrorTrap(): return Pix(lept.pixBackgroundNorm( - self._pix, + target_pix._pix, mask or ffi.NULL, grayscale or ffi.NULL, tile_size[0], @@ -450,8 +449,8 @@ class Pix: if get_leptonica_version() < 'leptonica-1.72': # Older versions of Leptonica (pre-1.72) have a buggy # implementation of pixCorrelationBinary that overflows on larger - # images. Ubuntu trusty has 1.70. Ubuntu PPA - # ppa:rebuntu16/avidemux+unofficial has "leptonlib" 1.73. + # images. Ubuntu 14.04/trusty has 1.70. Ubuntu PPA + # ppa:alex-p/tesseract-ocr has leptonlib 1.75. pix1_count = ffi.new('l_int32 *') pix2_count = ffi.new('l_int32 *') pixn_count = ffi.new('l_int32 *') diff --git a/src/ocrmypdf/lib/_leptonica.py b/src/ocrmypdf/lib/_leptonica.py index 9bdb3aed..80e67386 100644 --- a/src/ocrmypdf/lib/_leptonica.py +++ b/src/ocrmypdf/lib/_leptonica.py @@ -3,8 +3,9 @@ import _cffi_backend ffi = _cffi_backend.FFI('ocrmypdf.lib._leptonica', _version = 0x2601, - _types = b'\x00\x00\x0F\x0D\x00\x00\xBB\x03\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\xBE\x03\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x01\x11\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x01\x11\x00\x00\xBA\x03\x00\x00\x0F\x03\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x01\x11\x00\x00\x01\x11\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x01\x11\x00\x00\x01\x11\x00\x00\x01\x11\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x01\x11\x00\x00\x01\x11\x00\x00\x01\x11\x00\x00\x0D\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x01\x11\x00\x00\x01\x11\x00\x00\x01\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x01\x11\x00\x00\x01\x11\x00\x00\x0D\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x01\x11\x00\x00\x01\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x01\x11\x00\x00\x01\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x0D\x01\x00\x00\x02\x03\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x01\x11\x00\x00\x0D\x01\x00\x00\x0D\x01\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x01\x11\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x01\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x01\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x08\x11\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\xC7\x03\x00\x00\x1C\x01\x00\x00\x00\x0F\x00\x00\xBD\x0D\x00\x00\x00\x0F\x00\x00\x49\x0D\x00\x00\x00\x0F\x00\x00\x02\x0D\x00\x00\x01\x11\x00\x00\x01\x11\x00\x00\x1F\x03\x00\x00\x00\x0F\x00\x00\x02\x0D\x00\x00\x01\x11\x00\x00\x01\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x6E\x11\x00\x00\x6E\x11\x00\x00\x6E\x11\x00\x00\x00\x0F\x00\x00\x02\x0D\x00\x00\x01\x11\x00\x00\x6E\x11\x00\x00\x6E\x11\x00\x00\x00\x0F\x00\x00\x02\x0D\x00\x00\x01\x11\x00\x00\x49\x11\x00\x00\x49\x11\x00\x00\x00\x0F\x00\x00\x02\x0D\x00\x00\x01\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x0D\x01\x00\x00\x07\x01\x00\x00\x49\x11\x00\x00\x00\x0F\x00\x00\x02\x0D\x00\x00\x01\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x6E\x11\x00\x00\x6E\x11\x00\x00\x00\x0F\x00\x00\x02\x0D\x00\x00\x01\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x0D\x01\x00\x00\x01\x03\x00\x00\x9D\x11\x00\x00\x00\x0F\x00\x00\x02\x0D\x00\x00\x01\x11\x00\x00\xC6\x03\x00\x00\x65\x03\x00\x00\x00\x0F\x00\x00\x02\x0D\x00\x00\x08\x11\x00\x00\x01\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x02\x0D\x00\x00\xC4\x03\x00\x00\xA3\x11\x00\x00\x01\x11\x00\x00\x0D\x01\x00\x00\x00\x0F\x00\x00\xCA\x0D\x00\x00\x10\x11\x00\x00\x00\x0F\x00\x00\xCA\x0D\x00\x00\x9D\x11\x00\x00\x00\x0F\x00\x00\xCA\x0D\x00\x00\xCA\x03\x00\x00\x00\x0F\x00\x00\x00\x09\x00\x00\x01\x09\x00\x00\x02\x09\x00\x00\xBE\x03\x00\x00\x02\x01\x00\x00\x0E\x01\x00\x00\x0B\x01\x00\x00\x05\x01\x00\x00\x03\x01\x00\x00\xBC\x03\x00\x00\xC5\x03\x00\x00\x04\x01\x00\x00\xC7\x03\x00\x00\x08\x01\x00\x00\x0C\x01\x00\x00\x06\x01\x00\x00\x00\x01', - _globals = (b'\x00\x00\xB1\x23boxDestroy',0,b'\x00\x00\x67\x23getLeptonicaVersion',0,b'\x00\x00\xB7\x23lept_free',0,b'\x00\x00\x69\x23makePixelSumTab8',0,b'\x00\x00\x16\x23pixAnd',0,b'\x00\x00\x23\x23pixBackgroundNorm',0,b'\x00\x00\x1B\x23pixCleanBackgroundToWhite',0,b'\x00\x00\x0D\x23pixClipRectangle',0,b'\x00\x00\x8D\x23pixColorFraction',0,b'\x00\x00\x59\x23pixColorMagnitude',0,b'\x00\x00\x0A\x23pixConvertRGBToLuminance',0,b'\x00\x00\x6B\x23pixCorrelationBinary',0,b'\x00\x00\x80\x23pixCountPixels',0,b'\x00\x00\x63\x23pixDeserializeFromMemory',0,b'\x00\x00\x50\x23pixDeskew',0,b'\x00\x00\xB4\x23pixDestroy',0,b'\x00\x00\x0A\x23pixEndianByteSwapNew',0,b'\x00\x00\x00\x23pixFindPageForeground',0,b'\x00\x00\x7B\x23pixFindSkew',0,b'\x00\x00\x2F\x23pixGammaTRC',0,b'\x00\x00\x70\x23pixGetAverageMaskedRGB',0,b'\x00\x00\x36\x23pixGlobalNormRGB',0,b'\x00\x00\x12\x23pixInvert',0,b'\x00\x00\x54\x23pixMaskOverColorPixels',0,b'\x00\x00\x85\x23pixNumSignificantGrayColors',0,b'\x00\x00\x96\x23pixOtsuAdaptiveThreshold',0,b'\x00\x00\x3E\x23pixOtsuThreshOnBackgroundNorm',0,b'\x00\x00\x60\x23pixRead',0,b'\x00\x00\x50\x23pixRemoveColormap',0,b'\x00\x00\x12\x23pixRotate180',0,b'\x00\x00\x50\x23pixRotateOrth',0,b'\x00\x00\x4B\x23pixScale',0,b'\x00\x00\xA0\x23pixSerializeToMemory',0,b'\x00\x00\xA5\x23pixWriteImpliedFormat',0,b'\x00\x00\xAB\x23pixWriteMemPng',0), - _struct_unions = ((b'\x00\x00\x00\xBA\x00\x00\x00\x02Box',b'\x00\x00\x02\x11x',b'\x00\x00\x02\x11y',b'\x00\x00\x02\x11w',b'\x00\x00\x02\x11h',b'\x00\x00\xC7\x11refcount'),(b'\x00\x00\x00\xBB\x00\x00\x00\x02Pix',b'\x00\x00\xC7\x11w',b'\x00\x00\xC7\x11h',b'\x00\x00\xC7\x11d',b'\x00\x00\xC7\x11spp',b'\x00\x00\xC7\x11wpl',b'\x00\x00\xC7\x11refcount',b'\x00\x00\x02\x11xres',b'\x00\x00\x02\x11yres',b'\x00\x00\x02\x11informat',b'\x00\x00\x02\x11special',b'\x00\x00\xBD\x11text',b'\x00\x00\xC3\x11colormap',b'\x00\x00\xC6\x11data'),(b'\x00\x00\x00\xBC\x00\x00\x00\x02PixColormap',b'\x00\x00\xB8\x11array',b'\x00\x00\x02\x11depth',b'\x00\x00\x02\x11nalloc',b'\x00\x00\x02\x11n')), - _typenames = (b'\x00\x00\x00\xBABOX',b'\x00\x00\x00\xBBPIX',b'\x00\x00\x00\xBCPIXCMAP',b'\x00\x00\x00\x1Fl_float32',b'\x00\x00\x00\xBFl_float64',b'\x00\x00\x00\xC1l_int16',b'\x00\x00\x00\x02l_int32',b'\x00\x00\x00\xC0l_int64',b'\x00\x00\x00\xC2l_int8',b'\x00\x00\x00\xC9l_uint16',b'\x00\x00\x00\xC7l_uint32',b'\x00\x00\x00\xC8l_uint64',b'\x00\x00\x00\xC5l_uint8'), + _types = b'\x00\x00\x0F\x0D\x00\x00\xBB\x03\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\xBE\x03\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x01\x11\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x01\x11\x00\x00\xBA\x03\x00\x00\x0F\x03\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x01\x11\x00\x00\x01\x11\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x01\x11\x00\x00\x01\x11\x00\x00\x01\x11\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x01\x11\x00\x00\x01\x11\x00\x00\x01\x11\x00\x00\x0D\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x01\x11\x00\x00\x01\x11\x00\x00\x01\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x01\x11\x00\x00\x01\x11\x00\x00\x0D\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x01\x11\x00\x00\x01\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x01\x11\x00\x00\x01\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x0D\x01\x00\x00\x02\x03\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x01\x11\x00\x00\x0D\x01\x00\x00\x0D\x01\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x01\x11\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x01\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x01\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x08\x11\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\xC9\x03\x00\x00\x1C\x01\x00\x00\x00\x0F\x00\x00\xBD\x0D\x00\x00\x00\x0F\x00\x00\x49\x0D\x00\x00\x00\x0F\x00\x00\x02\x0D\x00\x00\x01\x11\x00\x00\x01\x11\x00\x00\x1F\x03\x00\x00\x00\x0F\x00\x00\x02\x0D\x00\x00\x01\x11\x00\x00\x01\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x6E\x11\x00\x00\x6E\x11\x00\x00\x6E\x11\x00\x00\x00\x0F\x00\x00\x02\x0D\x00\x00\x01\x11\x00\x00\x6E\x11\x00\x00\x6E\x11\x00\x00\x00\x0F\x00\x00\x02\x0D\x00\x00\x01\x11\x00\x00\x49\x11\x00\x00\x49\x11\x00\x00\x00\x0F\x00\x00\x02\x0D\x00\x00\x01\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x0D\x01\x00\x00\x07\x01\x00\x00\x49\x11\x00\x00\x00\x0F\x00\x00\x02\x0D\x00\x00\x01\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x6E\x11\x00\x00\x6E\x11\x00\x00\x00\x0F\x00\x00\x02\x0D\x00\x00\x01\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x0D\x01\x00\x00\x01\x03\x00\x00\x9D\x11\x00\x00\x00\x0F\x00\x00\x02\x0D\x00\x00\x01\x11\x00\x00\xC8\x03\x00\x00\x65\x03\x00\x00\x00\x0F\x00\x00\x02\x0D\x00\x00\x08\x11\x00\x00\x01\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x02\x0D\x00\x00\xC6\x03\x00\x00\xA3\x11\x00\x00\x01\x11\x00\x00\x0D\x01\x00\x00\x00\x0F\x00\x00\xCC\x0D\x00\x00\x10\x11\x00\x00\x00\x0F\x00\x00\xCC\x0D\x00\x00\x9D\x11\x00\x00\x00\x0F\x00\x00\xCC\x0D\x00\x00\xCC\x03\x00\x00\x00\x0F\x00\x00\x00\x09\x00\x00\x01\x09\x00\x00\x02\x09\x00\x00\xBE\x03\x00\x00\x02\x01\x00\x00\x0E\x01\x00\x00\x00\x0B\x00\x00\x01\x0B\x00\x00\x0B\x01\x00\x00\x05\x01\x00\x00\x03\x01\x00\x00\xBC\x03\x00\x00\xC7\x03\x00\x00\x04\x01\x00\x00\xC9\x03\x00\x00\x08\x01\x00\x00\x0C\x01\x00\x00\x06\x01\x00\x00\x00\x01', + _globals = (b'\xFF\xFF\xFF\x0BL_CLONE',2,b'\xFF\xFF\xFF\x0BL_COPY',1,b'\xFF\xFF\xFF\x0BL_COPY_CLONE',3,b'\xFF\xFF\xFF\x0BL_INSERT',0,b'\xFF\xFF\xFF\x0BL_NOCOPY',0,b'\xFF\xFF\xFF\x0BREMOVE_CMAP_BASED_ON_SRC',4,b'\xFF\xFF\xFF\x0BREMOVE_CMAP_TO_BINARY',0,b'\xFF\xFF\xFF\x0BREMOVE_CMAP_TO_FULL_COLOR',2,b'\xFF\xFF\xFF\x0BREMOVE_CMAP_TO_GRAYSCALE',1,b'\xFF\xFF\xFF\x0BREMOVE_CMAP_WITH_ALPHA',3,b'\x00\x00\xB1\x23boxDestroy',0,b'\x00\x00\x67\x23getLeptonicaVersion',0,b'\x00\x00\xB7\x23lept_free',0,b'\x00\x00\x69\x23makePixelSumTab8',0,b'\x00\x00\x16\x23pixAnd',0,b'\x00\x00\x23\x23pixBackgroundNorm',0,b'\x00\x00\x1B\x23pixCleanBackgroundToWhite',0,b'\x00\x00\x0D\x23pixClipRectangle',0,b'\x00\x00\x8D\x23pixColorFraction',0,b'\x00\x00\x59\x23pixColorMagnitude',0,b'\x00\x00\x0A\x23pixConvertRGBToLuminance',0,b'\x00\x00\x6B\x23pixCorrelationBinary',0,b'\x00\x00\x80\x23pixCountPixels',0,b'\x00\x00\x63\x23pixDeserializeFromMemory',0,b'\x00\x00\x50\x23pixDeskew',0,b'\x00\x00\xB4\x23pixDestroy',0,b'\x00\x00\x0A\x23pixEndianByteSwapNew',0,b'\x00\x00\x00\x23pixFindPageForeground',0,b'\x00\x00\x7B\x23pixFindSkew',0,b'\x00\x00\x2F\x23pixGammaTRC',0,b'\x00\x00\x70\x23pixGetAverageMaskedRGB',0,b'\x00\x00\x36\x23pixGlobalNormRGB',0,b'\x00\x00\x12\x23pixInvert',0,b'\x00\x00\x54\x23pixMaskOverColorPixels',0,b'\x00\x00\x85\x23pixNumSignificantGrayColors',0,b'\x00\x00\x96\x23pixOtsuAdaptiveThreshold',0,b'\x00\x00\x3E\x23pixOtsuThreshOnBackgroundNorm',0,b'\x00\x00\x60\x23pixRead',0,b'\x00\x00\x50\x23pixRemoveColormap',0,b'\x00\x00\x54\x23pixRemoveColormapGeneral',0,b'\x00\x00\x12\x23pixRotate180',0,b'\x00\x00\x50\x23pixRotateOrth',0,b'\x00\x00\x4B\x23pixScale',0,b'\x00\x00\xA0\x23pixSerializeToMemory',0,b'\x00\x00\xA5\x23pixWriteImpliedFormat',0,b'\x00\x00\xAB\x23pixWriteMemPng',0), + _struct_unions = ((b'\x00\x00\x00\xBA\x00\x00\x00\x02Box',b'\x00\x00\x02\x11x',b'\x00\x00\x02\x11y',b'\x00\x00\x02\x11w',b'\x00\x00\x02\x11h',b'\x00\x00\xC9\x11refcount'),(b'\x00\x00\x00\xBB\x00\x00\x00\x02Pix',b'\x00\x00\xC9\x11w',b'\x00\x00\xC9\x11h',b'\x00\x00\xC9\x11d',b'\x00\x00\xC9\x11spp',b'\x00\x00\xC9\x11wpl',b'\x00\x00\xC9\x11refcount',b'\x00\x00\x02\x11xres',b'\x00\x00\x02\x11yres',b'\x00\x00\x02\x11informat',b'\x00\x00\x02\x11special',b'\x00\x00\xBD\x11text',b'\x00\x00\xC5\x11colormap',b'\x00\x00\xC8\x11data'),(b'\x00\x00\x00\xBC\x00\x00\x00\x02PixColormap',b'\x00\x00\xB8\x11array',b'\x00\x00\x02\x11depth',b'\x00\x00\x02\x11nalloc',b'\x00\x00\x02\x11n')), + _enums = (b'\x00\x00\x00\xC0\x00\x00\x00\x16$1\x00REMOVE_CMAP_TO_BINARY,REMOVE_CMAP_TO_GRAYSCALE,REMOVE_CMAP_TO_FULL_COLOR,REMOVE_CMAP_WITH_ALPHA,REMOVE_CMAP_BASED_ON_SRC',b'\x00\x00\x00\xC1\x00\x00\x00\x16$2\x00L_NOCOPY,L_INSERT,L_COPY,L_CLONE,L_COPY_CLONE'), + _typenames = (b'\x00\x00\x00\xBABOX',b'\x00\x00\x00\xBBPIX',b'\x00\x00\x00\xBCPIXCMAP',b'\x00\x00\x00\x1Fl_float32',b'\x00\x00\x00\xBFl_float64',b'\x00\x00\x00\xC3l_int16',b'\x00\x00\x00\x02l_int32',b'\x00\x00\x00\xC2l_int64',b'\x00\x00\x00\xC4l_int8',b'\x00\x00\x00\xCBl_uint16',b'\x00\x00\x00\xC9l_uint32',b'\x00\x00\x00\xCAl_uint64',b'\x00\x00\x00\xC7l_uint8'), ) diff --git a/src/ocrmypdf/lib/compile_leptonica.py b/src/ocrmypdf/lib/compile_leptonica.py index 6da11266..5ffa7d87 100644 --- a/src/ocrmypdf/lib/compile_leptonica.py +++ b/src/ocrmypdf/lib/compile_leptonica.py @@ -72,6 +72,24 @@ struct Box }; typedef struct Box BOX; +enum { + REMOVE_CMAP_TO_BINARY = 0, /*!< remove colormap for conv to 1 bpp */ + REMOVE_CMAP_TO_GRAYSCALE = 1, /*!< remove colormap for conv to 8 bpp */ + REMOVE_CMAP_TO_FULL_COLOR = 2, /*!< remove colormap for conv to 32 bpp */ + REMOVE_CMAP_WITH_ALPHA = 3, /*!< remove colormap and alpha */ + REMOVE_CMAP_BASED_ON_SRC = 4 /*!< remove depending on src format */ +}; + +/*! Access and storage flags */ +enum { + L_NOCOPY = 0, /*!< do not copy the object; do not delete the ptr */ + L_INSERT = L_NOCOPY, /*!< stuff it in; do not copy or clone */ + L_COPY = 1, /*!< make/use a copy of the object */ + L_CLONE = 2, /*!< make/use clone (ref count) of the object */ + L_COPY_CLONE = 3 /*!< make a new array object (e.g., pixa) and fill */ + /*!< the array with clones (e.g., pix) */ +}; + """) ffibuilder.cdef(""" @@ -227,6 +245,11 @@ PIX * pixInvert(PIX * pixd, PIX * pixs); +PIX * +pixRemoveColormapGeneral(PIX *pixs, + l_int32 type, + l_int32 ifnocmap); + void boxDestroy(BOX **pbox); diff --git a/tests/resources/README.rst b/tests/resources/README.rst index 2b6e5683..c97c1061 100644 --- a/tests/resources/README.rst +++ b/tests/resources/README.rst @@ -147,6 +147,7 @@ Assemblies These test resources are assemblies or derivatives from other previously mentioned files, released under the same license terms as their input files. - baiona_gray.png (from baiona.png) +- baiona_colormapped.png (from baiona.png) - cardinal.pdf (four cardinal directions, baked-in rotated copies of LinnSequencer.jpg) - ccitt.pdf (LinnSequencer.jpg, converted to CCITT encoding) - encrypted_algo4.pdf (congress.jpg, encrypted with algorithm 4 - not supported by PyPDF2) diff --git a/tests/resources/baiona-colormapped.png b/tests/resources/baiona-colormapped.png new file mode 100644 index 0000000000000000000000000000000000000000..5b60b913db997b9e8d0501dd328711fed7c90c4e GIT binary patch literal 54170 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

_)^{FU!$*XetO2%Otq7GER!6ZrITA- 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 qc8&!?s$32r. + + +import os +import shutil +import pytest +import sys +import ocrmypdf.leptonica as lept + + +def test_colormap_backgroundnorm(resources): + # Issue #262 - unclear how to reproduce exactly, so just ensure leptonica + # can handle that case + pix = lept.Pix.read(resources / 'baiona-colormapped.png') + pix.background_norm()