是否有一种显而易见的方法可以解决这个问题? 我只是想制作缩略图。
#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
来源:oschina
链接:https://my.oschina.net/stackoom/blog/3166972