是否有一个简单的解决方案来修剪PIL中的图像空白?
ImageMagick通过以下方式轻松支持它:
convert test.jpeg -fuzz 7% -trim test_trimmed.jpeg
Run Code Online (Sandbox Code Playgroud)
我找到了PIL的解决方案:
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)
Run Code Online (Sandbox Code Playgroud)
但是这个解决方案有缺点:
border颜色,这对我来说不是什么大问题,我的图像有白色背景-fuzz密钥.添加一些模糊裁剪.因为我可以有一些jpeg压缩工件和不需要的巨大阴影.可能PIL有一些内置的功能吗?还是有一些快速解决方案?
我想通过剪切边框上的白色区域将图像裁剪为较小的尺寸.我尝试了在这个论坛中建议的解决方案将PNG图像裁剪为其最小尺寸但是pil的getbbox()方法返回了与图像大小相同的边界框,即它似乎无法识别空白区域周围.我尝试了以下方法:
>>>import Image
>>>im=Image.open("myfile.png")
>>>print im.format, im.size, im.mode
>>>print im.getbbox()
PNG (2400,1800) RGBA
(0,0,2400,1800)
Run Code Online (Sandbox Code Playgroud)
我通过使用GIMP自动裁剪裁剪图像来检查我的图像是否具有真正的白色可裁剪边框.我也试过ps和eps版本的图,没有运气.
任何帮助将受到高度赞赏.
python crop bounding-box image-editing python-imaging-library
在图像处理方面我非常喜欢:(我有一堆PNG文件(其中300个),我希望裁剪大面积的透明度.我想显然自动化过程,因此为什么我尝试使用python和PIL.
现在我看看以下链接, 将PNG图像裁剪为最小尺寸,并使用此链接建议的Numpy,使用python/PIL自动裁剪图像,两者都没有成功:(输出文件与输入文件!没有裁剪透明度,大小相同.getbbox返回相同的宽度和高度.
这是其中一个图像的链接; 98x50 按钮图像是一个铃铛形状的按钮图标.它是用白色绘制的,因此很难看出哪个透明背景.预期的结果将是一个20x17的按钮(内部透明度为20x17的盒子保持不变)
这是我正在使用的代码;
#!/usr/bin/env python
import sys
import os
import Image
import numpy as np
def autocrop_image2(image):
image.load()
image_data = np.asarray(image)
image_data_bw = image_data.max(axis=2)
non_empty_columns = np.where(image_data_bw.max(axis=0) > 0)[0]
non_empty_rows = np.where(image_data_bw.max(axis=1) > 0)[0]
cropBox = (min(non_empty_rows), max(non_empty_rows),
min(non_empty_columns), max(non_empty_columns))
image_data_new = image_data[cropBox[0]:cropBox[
1] + 1, cropBox[2]:cropBox[3] + 1, :]
new_image = Image.fromarray(image_data_new)
return new_image
def autocrop_image(image, border=0):
# Get the bounding box
bbox = image.getbbox()
# Crop the image to the contents …Run Code Online (Sandbox Code Playgroud)