一、前言
在我们日常生活中,缩略图很大程度减少了我们内存的使用。如果我们看一张图片就必须加载完成后才能看,那么我们就会发现很多应用都变慢了很多,而且流量也消耗的很快。今天我们就来看看Python生成缩略图的操作。
二、Pillow模块
这里我们还是使用Pillow来实现,如果不了解Pillow可以参考【图片操作】批量转换黑白图片。
1、安装
Pillow的安装只需要执行下面的语句:
pip install pillow 复制代码
这里在上一篇也提到了,这里就不再细说了。
2、简单操作
这里我们回顾一下Pillow的简单操作,这里直接看代码:
# 导入Image子模块 from PIL import Image # 读取图片 img = Image.open("1.jpg") # 显示图片 img.show() # 保存图片 img.save("11.jpg") 复制代码
上面几个操作都非常简单,就是图片的最基本的操作。其中我们使用的是Image
子模块,这是Pillow最常用的一个模块。
3、生成缩略图
我们通过Image.open
函数打开图片后,返回的图片对象有两个方法可以用来生成缩略图,我们先来看看resize
方法:
from PIL import Image img = Image.open("1.jpg") # 修改图片尺寸 img = img.resize((100, 50)) img.save("11.jpg") 复制代码
这里我们调用了resize
方法,并传入了一个尺寸的元组,下面是我们的缩略图效果:
网络异常,图片无法展示
|
from PIL import Image img = Image.open("1.jpg") # 获取原图尺寸 w, h = img.size # 根据原图尺寸来设置缩略图大小 img = img.resize((w//3, h//3)) img.save("11.jpg") 复制代码
这里我们现获取了原图的尺寸,然后再将宽高缩小到原来的1/3,这样缩略图就不会变形了。另外我们还有个更简单的方法:
from PIL import Image img = Image.open("1.jpg") # 生成缩略图 img.thumbnail((100, 20)) img.save("11.jpg") 复制代码
这里我们直接使用thumbnail
方法来生成缩略图,这里默认是不会变形的,即使我们的尺寸是不协调的,它也会根据我们传的参数来进行缩放。它的缩放规则如下:缩放倍数=1/min{W/w, H/h}。其中W、H是原图尺寸,w、h是传入的尺寸。
三、批量生成缩略图
这里我们直接上代码:
import os from PIL import Image # 创建目录用于存储生成的图片 save_dirname = "test_thumb" if not os.path.exists(save_dirname): os.mkdir(save_dirname) dirname = "test" imgs = [os.path.join(dirname, i) for i in os.listdir(dirname)] for idx, img in enumerate(imgs): if img.endswith("jpg") or img.endswith("png") or img.endswith("jpeg"): img = Image.open(img) img.thumbnail((100, 200)) img.save("test_thumb/" + str(idx) + ".jpg") 复制代码
这里和上一篇的最后一部分几乎是一样的,读者可以参考上一篇【图片操作】批量转换黑白图片。