欢迎关注WX公众号:【程序员管小亮】

Image.resize()函数用于修改图片的尺寸。

Image.thumbnail()函数用于制作当前图片的缩略图。

  • resize() 函数是修改图片的size, resample参数传入采样算法, 一般使用高质量缩放的Image.LANCZOS参数。

  • thumbnail() 函数是制作当前图片的缩略图, 参数size指定了图片的最大的宽度和高度。

Image.resize

from PIL import Imageimg2 = 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 Imageimg = 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 Imageimg = 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课程推荐。

python PIL的Image.resize()和Image.thumbnail()函数的区别相关推荐

  1. python可变类型与不可变类型作为函数参数区别_不要用可变类型对象做函数默认参数...

    不要用可变类型对象做函数默认参数 1. 可变对象做默认参数 内置数据类型int,float,bool,str,tuple 是不可变对象, 字典,集合,列表是可变对象. 在定义python函数时,千万不 ...

  2. 【Python学习】 - Pandas学习 sort_value( ),sort_index( )排序函数的区别与使用

    按索引对DataFrame或Series进行排序(注意ascending=false的意思是按照降序排序,若不写参数则默认升序排序) DataFrame的构造函数默认参数是(值,列名,行索引),行索引 ...

  3. 使用Python PIL库中的Image.thumbnail函数裁剪图片

    发现自己还没有头像,想着上传ubuntu系统中我很喜欢的一个背景图片来当头像,但是因为图片过大,上传失败了.那么,我们如何使用python中强大的PIL库来进行图片裁剪呢? from PIL impo ...

  4. Python: PIL基本代码

    Python: PIL基本代码 # 声明使用字符库 # -*- coding: utf-8 -*- # 导入系统库 import os # 导入文件读写库 import io # 导入数学库 impo ...

  5. python PIL图片拼接

    w_num = 5h_num = int(len(imgs)/w_num) + 1UNIT_SIZE = 200 # 一张图的大小是200*200target_shape = (w_num * (UN ...

  6. python输出文本居中_#python PIL ImageDraw text 文本居中#

    python pip pil有什么东西 你所问的问题实是属1.先参考[教程]Python中的内置的和方的模块搞懂PIL是属于第三方Python模块2.再参考:[待完善][总结]Python安装第三方的 ...

  7. python对图片颜色校正_使用Python PIL更改图像色调

    Using Python PIL, I'm trying to adjust the hue of a given image. I'm not very comfortable with the j ...

  8. python123九宫格输入_使用python PIL库实现简单验证码的去噪方法步骤

    字符型图片验证码识别完整过程及Python实现的博主,我的大部分知识点都是从他那里学来的. 想要识别验证码,收集足够多的样本后,首先要做的就是对验证码原始图片进行处理,对验证码识别分类之前,一般包括: ...

  9. Python PIL支持的图像文件格式

    Python PIL 支持的图像文件格式: BMP BUFR (identify only) CUR (read only) DCX (read only) EPS (write-only) FITS ...

最新文章

  1. ros安装orocos造成工作空间编译不通过
  2. Qt 打印时间 毫秒级
  3. 【音效下载 / 编辑】网站
  4. 宝山一模能用计算机吗,宝山区一模各科试卷(含答案)
  5. mysql administrator 备份 表_【转】如何使用 MySQL Administrator 管理/备份/还原 My SQL 数据库...
  6. malloc和calloc的区别
  7. SQL mysql优化
  8. java 获取web目录结构_Intellij Idea Javaweb 目录结构及获取项目内资源
  9. ubuntu linux kvm安装,ubuntu16.04 下kvm安装
  10. 阿里云服务器(windows2012)
  11. MySQL 报错:Translating SQLException with SQL state '42000', error code '1064', message
  12. pandas datetime数据类型
  13. 网络服务(5)——usb网卡名称修改(RK3399 Ubuntu)
  14. 凌恩客户文献|《ISME》解析土壤侵蚀对微生物群落结构以及网络功能复杂性影响
  15. 数字化时代,如何做好用户体验与应用性能管理
  16. 红米手机root之后 eclipse无法打开data目录
  17. 如何合理运用美容院资源
  18. 工程师的18个梦想,你有几个?
  19. 网页报错404原因及解决方法
  20. 计算机在往硬盘上写数据时寻道,计算机在往硬盘上写数据时寻道是从( )磁道开始。...

热门文章

  1. 涨跌停计算器_在线涨跌计算器
  2. 庄懂的TA笔记(十三)<特效-混合模式:四种主要透明通道用法 AC,AB,AD,自定义混合>
  3. 微信公众号+Flask+新浪SAE 配置
  4. 【面朝大厂】面试官:说几种常用的分布式 ID 解决方案
  5. 项目中引入阿里巴巴矢量库(unicode)
  6. 在安装了Sql2000的基础上安装Sql2005的详细过程
  7. 医学图像的CT值与像素值总结及转换代码
  8. 基础篇 | 15 C++ 科学计算 - OpenBLAS的安装与使用
  9. Java中Map.Entry详解
  10. [PHP面试题]跳槽面试必背-自己最近5年的整理(二)