from typing import Tuple from PIL import Image, ImageFilter def _pixelate(area: Image.Image, radius: int, **kwargs) -> Image.Image: width, height = area.size small = area.resize((width // radius, height // radius)) return small.resize(area.size, Image.NEAREST) def _blur(area: Image.Image, radius: int, **kwargs) -> Image.Image: return area.filter(ImageFilter.GaussianBlur(radius)) def _color(area: Image.Image, color: str = 'black', **kwargs) -> Image.Image: return Image.new('RGB', area.size, color) def censor_area(image_: Image.Image, area: Tuple[int, int, int, int], func, *args, **kwargs): original_area = image_.crop(area) processed_area = func(original_area, *args, **kwargs) assert processed_area.size == original_area.size image_.paste(processed_area, area) return image_