欢迎关注WX公众号:【程序员管小亮】
Image.resize()函数用于修改图片的尺寸。
Image.thumbnail()函数用于制作当前图片的缩略图。
-
resize()
函数是修改图片的size
,resample
参数传入采样算法, 一般使用高质量缩放的Image.LANCZOS
参数。 -
thumbnail()
函数是制作当前图片的缩略图, 参数size
指定了图片的最大的宽度和高度。
Image.resize
from PIL import Image
img2 = Image.open('./1.jpg')
print("初始尺寸",img2.size)
img2.resize((128,128))
print("Image.resize",img2.size)
# 初始尺寸 (500, 336)
# Image.resize (500, 336)
Image.thumbnail
from PIL import Image
img = Image.open('./1.jpg')
print("初始尺寸",img.size)
img.thumbnail((128,128))
print("默认缩放NEARESET",img.size)
img.thumbnail((127,127),Image.BILINEAR)
print("BILINEAR",img.size)
img.thumbnail((126,126),Image.BICUBIC)
print("BICUBIC",img.size)
img.thumbnail((125,125),Image.ANTIALIAS)
print("ANTIALIAS",img.size)
# 初始尺寸 (500, 336)
# 默认缩放NEARESET (128, 86)
# BILINEAR (127, 85)
# BICUBIC (126, 84)
# ANTIALIAS (125, 83)
差别
细心的同学应该发现了 Image.thumbnail
之后的图片出现“设定大小和输出大小不一致”的这个情况,而 Image.resize
就不是这样的,为什么会这样呢?这要从两个函数各自的特性说起:
这两个函数都是对图片进行缩放,但是存在区别的:
-
resize()
函数会返回一个Image
对象,thumbnail()
函数返回None
。 -
resize()
中的size
参数直接设定了resize
之后图片的规格, 而thumbnail()
中的size
参数则是设定了x/y
上的最大值. 也就是说, 经过resize()
处理的图片可能会被拉伸, 而经过thumbnail()
处理的图片不会被拉伸。 -
thumbnail()
函数内部调用了resize()
, 可以认为thumbnail()
是对resize()
的一种封装。
from PIL import Image
img = Image.open('./1.jpg')
print("thumbnail前的尺寸", img.size)
img.thumbnail((128, 128))
# img3 = thumbnail.thumbnail((128,128))
# print("thumbnail后的尺寸", img3.size)
# AttributeError: 'NoneType' object has no attribute 'size'
img.save("thumbnail.jpg")
img_thumbnail = Image.open('./thumbnail.jpg')
print("thumbnail后的尺寸", img_thumbnail.size)
img_thumbnail.show()
print('* -' * 15)
img2 = Image.open('./1.jpg')
print("resize前的尺寸", img2.size)
img2 = img2.resize((128, 128))
img2.save("resized.jpg")
img_resize = Image.open('./resized.jpg')
print("resize后的尺寸", img_resize.size)
img_resize.show()
# thumbnail前的形状 (500, 336)
# thumbnail后的形状 (128, 86)
# * -* -* -* -* -* -* -* -* -* -* -* -* -* -* -
# resize前的形状 (500, 336)
# resize后的形状 (128, 128)
原始图片
thumbnail
后的图片:
resize
后的图片
-
可以看出
thumbnail
后的图片还是原有的宽长比例,而resize
后的图片就是我们设置的比例了——正方形; -
可以看出
thumbnail
返回的是None,而resize
返回的就是图片。
img.thumbnail((128, 128))
# img3 = thumbnail.thumbnail((128,128))
# print("thumbnail后的尺寸", img3.size)
# AttributeError: 'NoneType' object has no attribute 'size'
img.save("thumbnail.jpg")
img2 = img2.resize((128, 128))
img2.save("resized.jpg")
python课程推荐。