def get_text_from_img(img: PIL.Image.Image): width, height = img.size text = [] for y in range(height): for x in range(width): red, green, blue = img.getpixel((x, y)) if red == 0: break index = (green << 8) + blue text.append(chr(index)) return "".join(text)
def strip_image(image: PIL.Image.Image) -> PIL.Image.Image: """Remove white and black edges""" for x in range(image.width): for y in range(image.height): r, g, b, _ = image.getpixel((x, y)) if r > 247 and g > 247 and b > 247: image.putpixel((x, y), (0, 0, 0, 0)) image = image.crop(image.getbbox()) return image
def _trim_image( img: PIL.Image.Image, border_color: typing.Tuple[int] = None, ) -> PIL.Image.Image: if border_color is None: trimmed = img for xy in itertools.product(range(2), range(2)): trimmed = _trim_image( img=trimmed, border_color=img.getpixel(xy), ) return trimmed bg = PIL.Image.new(img.mode, img.size, border_color) diff = PIL.ImageChops.difference(img, bg) bbox = diff.getbbox() if bbox: return img.crop(bbox) else: # found no content raise ValueError("cannot trim; image was empty")