Python PIL: 图片裁剪时若区域不足则填充黑色
我想制作一个缩略图,并把它裁剪到需要的大小。这个过程运行得很好,但如果我新的缩略图区域比裁剪的区域小,所有空白的地方就会填充成黑色。
代码:
import os
from PIL import Image
def resize(file_path):
file, ext = os.path.splitext(file_path)
im = Image.open(file_path)
size = (100, 'auto')
new_path = file + "_.jpg"
im.thumbnail(size, Image.ANTIALIAS)
region = im.crop((0, 0, 100, 100))
region.save(new_path, "JPEG")
也许裁剪方法里有类似 max_height 的选项或者其他什么设置?
谢谢!

4 个回答
1
我会这样做:
如果图片比较宽,就把它的高度调整到100像素。如果图片比较高,就把它的宽度调整到100像素。
然后从中间裁剪出一个100x100像素的部分。
def resize(file_path): file, ext = os.path.splitext(file_path) im = Image.open(file_path) w, h = im.size size = (100, 'auto') if h > w else ('auto', 100) new_path = file + "_.jpg" im.thumbnail(size, Image.ANTIALIAS) w, h = im.size region = im.crop((w/2 - 50, h/2 - 50, w/2 + 50, h/2 + 50)) region.save(new_path, "JPEG")
2
你需要在这里使用一些简单的算法,而不是盲目裁剪图片。
首先,找出图片中可以裁剪出的最大正方形,这个正方形的中心要和图片的中心对齐。最大正方形的边长应该是图片高度和宽度中较大的那个。
得到这个正方形后,将它调整到你需要的缩略图尺寸。
这种方法对于大多数图片来说都能很好地工作,不过如果你是在处理人脸图片的缩略图,这种方法可能就不太合适了,你可能需要一些人脸识别的技术来获得更好的效果。
1
你是不是想要在图片的尺寸大于100x100的时候才进行裁剪?如果是这样,
def resize(file_path):
file, ext = os.path.splitext(file_path)
im = Image.open(file_path)
size = (100, 'auto')
new_path = file + "_.jpg"
im.thumbnail(size, Image.ANTIALIAS)
if im.size[1] > 100:
im = im.crop((0, 0, 100, 100))
im.save(new_path, "JPEG")