使用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有缺点:
- 我需要定义
border
颜色,对我来说不是什么大问题,我的图像有白色背景 - 而最不利的是,这个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]