python PIL的Image.resize()和Image.thumbnail()函数的区别

欢迎关注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课程推荐。
在这里插入图片描述

原文地址:https://www.cnblogs.com/hzcya1995/p/13302774.html