是否有一种显而易见的方法可以解决这个问题?我只是想制作缩略图.
定义最大尺寸.然后,通过拍摄来计算调整大小比率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
此脚本将使用PIL(Python成像库)调整图像(somepic.jpg)的大小,宽度为300像素,高度与新宽度成比例.它通过确定300像素的原始宽度(img.size [0])然后将原始高度(img.size [1])乘以该百分比来实现.将"basewidth"更改为任何其他数字以更改图像的默认宽度.
from PIL import Image basewidth = 300 img = Image.open('somepic.jpg') wpercent = (basewidth/float(img.size[0])) hsize = int((float(img.size[1])*float(wpercent))) img = img.resize((basewidth,hsize), Image.ANTIALIAS) img.save('sompic.jpg')
我还建议使用PIL的缩略图方法,因为它消除了你的所有比例麻烦.
但有一个重要提示:替换
im.thumbnail(size)
同
im.thumbnail(size,Image.ANTIALIAS)
默认情况下,PIL使用Image.NEAREST过滤器进行大小调整,从而获得良好的性能,但质量很差.
总部设在@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)
PIL已经可以选择裁剪图像
img = ImageOps.fit(img, size, Image.ANTIALIAS)
from PIL import Image img = Image.open('/your iamge path/image.jpg') # image extension *.png,*.jpg new_width = 200 new_height = 300 img = img.resize((new_width, new_height), Image.ANTIALIAS) img.save('output image name.png') # format may what u want ,*.png,*jpg,*.gif
如果您尝试保持相同的宽高比,那么您不会调整原始大小的某个百分比吗?
例如,原始尺寸的一半
half = 0.5 out = im.resize( [int(half * s) for s in im.size] )
如果您不希望/不需要使用枕头打开图像,请使用以下命令:
from PIL import Image new_img_arr = numpy.array(Image.fromarray(img_arr).resize((new_width, new_height), Image.ANTIALIAS))
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