Python PIL:如果没有足够的照片区域,则使用黑色区域进行图像裁剪

Python PIL:如果没有足够的照片区域,则使用黑色区域进行图像裁剪,python,python-imaging-library,Python,Python Imaging Library,我想做拇指,把它裁剪成需要的尺寸。它工作得很好,但如果我的新拇指面积比裁剪面积小,所有的空白都会用黑色填充。 代码: 也许有一些选择,如作物法的最大高度或其他 谢谢! 您需要在那里应用一些简单的算法,而不是盲目裁剪 获取图像中最大尺寸的正方形,正方形中心与图像中心对齐。 最大尺寸的平方等于图像高度或宽度的最大值 获取正方形后,将其重新采样到缩略图尺寸的大小 对于大多数图像来说,这应该可以很好地工作,但是如果您正在为人脸图像生成缩略图,这可能不是一个好方法,并且您可能需要一些人脸识别技术来获得更

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

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

谢谢!

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

  • 获取图像中最大尺寸的正方形,正方形中心与图像中心对齐。 最大尺寸的平方等于图像高度或宽度的最大值

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

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

如果图像大于100x100,是否仅尝试有条件地裁剪图像? 如果是,

我找到了解决办法:

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

谢谢你的回复

我会这样做:

  • 如果图像很宽,则将其缩放为100px高。如果它很高,将其缩放为100px宽

  • 裁剪出中间的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")
    

运行thumbnail()过程后,进行裁剪的目的是什么格式?在这种情况下,如果图像的高度小于100,应该用什么填充该空间?或者你是在寻找一个中心提取它的作物的宽度,以适应高度?你已经张贴了你的答案,当我写我的:)但是,谢谢!
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")
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")