如何使用PIL调整图像大小并保持其纵横比?

时光怂恿深爱的人放手 提交于 2020-02-27 03:32:33

是否有一种显而易见的方法可以解决这个问题? 我只是想制作缩略图。


#1楼

PIL已经可以选择裁剪图像

img = ImageOps.fit(img, size, Image.ANTIALIAS)

#2楼

我丑陋的例子。

函数获取文件如:“pic [0-9a-z]。[extension]”,将它们调整为120x120,将部分移动到中心并保存到“ico [0-9a-z]。[extension]”,使用纵向和景观:

def imageResize(filepath):
    from PIL import Image
    file_dir=os.path.split(filepath)
    img = Image.open(filepath)

    if img.size[0] > img.size[1]:
        aspect = img.size[1]/120
        new_size = (img.size[0]/aspect, 120)
    else:
        aspect = img.size[0]/120
        new_size = (120, img.size[1]/aspect)
    img.resize(new_size).save(file_dir[0]+'/ico'+file_dir[1][3:])
    img = Image.open(file_dir[0]+'/ico'+file_dir[1][3:])

    if img.size[0] > img.size[1]:
        new_img = img.crop( (
            (((img.size[0])-120)/2),
            0,
            120+(((img.size[0])-120)/2),
            120
        ) )
    else:
        new_img = img.crop( (
            0,
            (((img.size[1])-120)/2),
            120,
            120+(((img.size[1])-120)/2)
        ) )

    new_img.save(file_dir[0]+'/ico'+file_dir[1][3:])

#3楼

定义最大尺寸。 然后,通过取min(maxwidth/width, maxheight/height)来计算调整大小比率。

适当的尺寸是oldsize*ratio

当然还有一个库方法来执行此操作:方法Image.thumbnail
以下是PIL文档中的(已编辑)示例。

import os, sys
import Image

size = 128, 128

for infile in sys.argv[1:]:
    outfile = os.path.splitext(infile)[0] + ".thumbnail"
    if infile != outfile:
        try:
            im = Image.open(infile)
            im.thumbnail(size, Image.ANTIALIAS)
            im.save(outfile, "JPEG")
        except IOError:
            print "cannot create thumbnail for '%s'" % infile

#4楼

总部设在@tomvon,我完成了以下工作:

调整宽度:

new_width  = 680
new_height = new_width * height / width 

调整高度:

new_height = 680
new_width  = new_height * width / height

然后就是:

img = img.resize((new_width, new_height), Image.ANTIALIAS)

#5楼

from PIL import Image
from resizeimage import resizeimage

def resize_file(in_file, out_file, size):
    with open(in_file) as fd:
        image = resizeimage.resize_thumbnail(Image.open(fd), size)
    image.save(out_file)
    image.close()

resize_file('foo.tif', 'foo_small.jpg', (256, 256))

我用这个库:

pip install python-resize-image
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!