【图片操作】批量生成缩略图

简介: 在我们日常生活中,缩略图很大程度减少了我们内存的使用。如果我们看一张图片就必须加载完成后才能看,那么我们就会发现很多应用都变慢了很多,而且流量也消耗的很快。今天我们就来看看Python生成缩略图的操作。

一、前言

在我们日常生活中,缩略图很大程度减少了我们内存的使用。如果我们看一张图片就必须加载完成后才能看,那么我们就会发现很多应用都变慢了很多,而且流量也消耗的很快。今天我们就来看看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")
复制代码

这里和上一篇的最后一部分几乎是一样的,读者可以参考上一篇【图片操作】批量转换黑白图片


目录
相关文章
|
1月前
批量获取图片(中)
批量获取图片(中)
32 0
PS - 批量处理(以批量修改图片像素为例)
PS - 批量处理(以批量修改图片像素为例)
3060 0
PS - 批量处理(以批量修改图片像素为例)
|
14天前
|
存储 Python
python实现图片与视频转换:将视频保存为图片,将批量图片保存为视频
python实现图片与视频转换:将视频保存为图片,将批量图片保存为视频
|
1月前
|
iOS开发 MacOS Python
批量获取图片(上)
批量获取图片(上)
28 0
|
人工智能 文字识别 API
20行代码教你如何批量提取图片中文字
大家好,我是志斌~ 之前志斌在考研的时候遇到了一个问题,就是要将图片中的文字给提取出来,当时是J哥帮忙搞出来的,现在已经考完研了,也学会了提取方式,现在来给大家分享一下。
741 0
20行代码教你如何批量提取图片中文字
|
数据安全/隐私保护
【图片操作】批量添加图片水印
现在盗图是非常常见的事情,许多人在使用图片时都不会标注图片的出处或者提及作者,这个时候水印就是个很好的东西了。我们可以给图片添加水印后再分享出去,这样就可以让其它人知道图片作者相关的信息。今天我们就带大家来实现水印的添加。
206 0
【图片操作】混合图片
混合图片的方式有很多种,我们先来看看如何通过混合图片的通道来实现图片混合。
126 0
|
计算机视觉
【图片操作】生成动态图片
动态图片我们使用的还是比较频繁的,平时的表情包有很多动图。今天我们要做的就是自己制作动态图片,其实就是将视频转换成动图,操作起来非常简单。下面我们就来看看如何实现吧。
533 0
|
缓存 Java 数据安全/隐私保护
给图片加水印?这是我见过最简单的实现方式
大家好,我是指北君。 在项目中经常有需要在图片上添加水印的需求以及在某些场合下需要身份证图片,这时就可以对身份证上加水印防止被用于其他用途,java 在处理图片水印时不需要额外的第三方包,使用 BufferedImage 和 Graphics2D 就可以搞定
给图片加水印?这是我见过最简单的实现方式
批量获得指定网站图片列表
Created by Jerry Wang, last modified on Sep 02, 2014
112 0
批量获得指定网站图片列表