python PIL的Image.resize()和Image.thumbnail()函数的区别
欢迎关注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()函数的区别相关推荐
- python可变类型与不可变类型作为函数参数区别_不要用可变类型对象做函数默认参数...
不要用可变类型对象做函数默认参数 1. 可变对象做默认参数 内置数据类型int,float,bool,str,tuple 是不可变对象, 字典,集合,列表是可变对象. 在定义python函数时,千万不 ...
- 【Python学习】 - Pandas学习 sort_value( ),sort_index( )排序函数的区别与使用
按索引对DataFrame或Series进行排序(注意ascending=false的意思是按照降序排序,若不写参数则默认升序排序) DataFrame的构造函数默认参数是(值,列名,行索引),行索引 ...
- 使用Python PIL库中的Image.thumbnail函数裁剪图片
发现自己还没有头像,想着上传ubuntu系统中我很喜欢的一个背景图片来当头像,但是因为图片过大,上传失败了.那么,我们如何使用python中强大的PIL库来进行图片裁剪呢? from PIL impo ...
- Python: PIL基本代码
Python: PIL基本代码 # 声明使用字符库 # -*- coding: utf-8 -*- # 导入系统库 import os # 导入文件读写库 import io # 导入数学库 impo ...
- python PIL图片拼接
w_num = 5h_num = int(len(imgs)/w_num) + 1UNIT_SIZE = 200 # 一张图的大小是200*200target_shape = (w_num * (UN ...
- python输出文本居中_#python PIL ImageDraw text 文本居中#
python pip pil有什么东西 你所问的问题实是属1.先参考[教程]Python中的内置的和方的模块搞懂PIL是属于第三方Python模块2.再参考:[待完善][总结]Python安装第三方的 ...
- 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 ...
- python123九宫格输入_使用python PIL库实现简单验证码的去噪方法步骤
字符型图片验证码识别完整过程及Python实现的博主,我的大部分知识点都是从他那里学来的. 想要识别验证码,收集足够多的样本后,首先要做的就是对验证码原始图片进行处理,对验证码识别分类之前,一般包括: ...
- Python PIL支持的图像文件格式
Python PIL 支持的图像文件格式: BMP BUFR (identify only) CUR (read only) DCX (read only) EPS (write-only) FITS ...
最新文章
- ros安装orocos造成工作空间编译不通过
- Qt 打印时间 毫秒级
- 【音效下载 / 编辑】网站
- 宝山一模能用计算机吗,宝山区一模各科试卷(含答案)
- mysql administrator 备份 表_【转】如何使用 MySQL Administrator 管理/备份/还原 My SQL 数据库...
- malloc和calloc的区别
- SQL mysql优化
- java 获取web目录结构_Intellij Idea Javaweb 目录结构及获取项目内资源
- ubuntu linux kvm安装,ubuntu16.04 下kvm安装
- 阿里云服务器(windows2012)
- MySQL 报错:Translating SQLException with SQL state '42000', error code '1064', message
- pandas datetime数据类型
- 网络服务(5)——usb网卡名称修改(RK3399 Ubuntu)
- 凌恩客户文献|《ISME》解析土壤侵蚀对微生物群落结构以及网络功能复杂性影响
- 数字化时代,如何做好用户体验与应用性能管理
- 红米手机root之后 eclipse无法打开data目录
- 如何合理运用美容院资源
- 工程师的18个梦想,你有几个?
- 网页报错404原因及解决方法
- 计算机在往硬盘上写数据时寻道,计算机在往硬盘上写数据时寻道是从( )磁道开始。...
热门文章
- 涨跌停计算器_在线涨跌计算器
- 庄懂的TA笔记(十三)<特效-混合模式:四种主要透明通道用法 AC,AB,AD,自定义混合>
- 微信公众号+Flask+新浪SAE 配置
- 【面朝大厂】面试官:说几种常用的分布式 ID 解决方案
- 项目中引入阿里巴巴矢量库(unicode)
- 在安装了Sql2000的基础上安装Sql2005的详细过程
- 医学图像的CT值与像素值总结及转换代码
- 基础篇 | 15 C++ 科学计算 - OpenBLAS的安装与使用
- Java中Map.Entry详解
- [PHP面试题]跳槽面试必背-自己最近5年的整理(二)