使用PIL修剪空白

是否有一个简单的解决scheme来修剪PIL图像上的空白?

ImageMagick可以通过以下方式轻松支持:

convert test.jpeg -fuzz 7% -trim test_trimmed.jpeg 

我find了PIL的解决scheme:

 from PIL import Image, ImageChops def trim(im, border): bg = Image.new(im.mode, im.size, border) diff = ImageChops.difference(im, bg) bbox = diff.getbbox() if bbox: return im.crop(bbox) 

但是这个解决scheme有缺点:

  1. 我需要定义border颜色,对我来说不是什么大问题,我的图像有白色背景
  2. 而最不利的是,这个PIL解决scheme不支持ImageMagick的-fuzz键。 添加一些模糊裁剪。 因为我可以有一些JPEG压缩文物和不需要的巨大阴影。

可能是PIL有一些内置的函数呢? 或者有一些快速解决scheme?

我不认为有什么内置的PIL可以做到这一点。 但是我修改了你的代码,所以它会这样做。

  • 它使用getpixel从左上angular的像素获取边框颜色,所以不需要传递颜色。
  • 从差分图像中减去一个标量,这是一个快速的方法,将100,100,100(在我的例子中)的所有值饱和为零。 所以是一个很好的方法来消除压缩造成的任何“摆动”。

码:

 from PIL import Image, ImageChops def trim(im): bg = Image.new(im.mode, im.size, im.getpixel((0,0))) diff = ImageChops.difference(im, bg) diff = ImageChops.add(diff, diff, 2.0, -100) bbox = diff.getbbox() if bbox: return im.crop(bbox) im = Image.open("bord3.jpg") im = trim(im) im.show() 

沉重的压缩jpeg:

在这里输入图像描述 七分裤: 在这里输入图像描述

嘈杂的jpeg:

在这里输入图像描述 七分裤: 在这里输入图像描述

使用魔杖http://docs.wand-py.org/en/0.3-maintenance/wand/image.html

修剪(颜色=无,绒毛= 0)从图像中删除实心边框。 默认情况下,使用左上像素作为指导,或者也可以指定要移除的颜色。

在ufp.image模块中使用修剪function。

 import ufp.image import PIL im = PIL.Image.open('test.jpg', 'r') trimed = ufp.image.trim(im, fuzz=13.3) trimed.save('trimed.jpg') 

看例子: 使用fuzz修剪图像边缘空白[Python]