Python-PIL:如果没有足够的照片区域,则图像裁剪为黑色区域

2024-05-20 10:10:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我想把拇指剪成所需的大小。它工作得很好,但如果我的新拇指面积比裁剪的面积小,那么所有的空白空间都会填充黑色。 代码:

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")

也许有一些选择,如最大高度的作物方法或任何其他?在

谢谢! enter image description here


Tags: path代码imageimportnewsizeos空间
3条回答

你需要在那里应用一些简单的算法,而不是盲目裁剪。在

  • 获得图像中最大尺寸的正方形,正方形中心与图像中心对齐。 图像的边长或最大宽度等于图像的最大宽度。

  • 获得正方形后,将其重新采样为缩略图尺寸的大小。

  • 对于大多数图像来说,这应该可以很好地工作,但是如果您要为人脸图像生成缩略图,这可能不是一个好的方法,并且您可能需要一些人脸识别技术来获得更好的输出。在

我找到了解决办法:

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)
    (width, height) = im.size
    if height >= width: box = (0, 0, 100, 100)
    else: box = (0, 0, 100, height)
    region = im.crop(box)
    region.save(new_path, "JPEG")

谢谢你的回复!在

如果图像大于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")

相关问题 更多 >