批次图片转档
这篇文章会介绍使用 Python 的 glob 标准函数库,搭配 Pillow 第三方函数库,实作可以一次将大量的图片,批次转档的功能 ( jpg 转 png、png 转 pdf、jpg 转 gif...等 ),转档过程中,也可以透过调整参数,实现批次压缩 jpg 的效果。
- 本篇使用的 Python 版本为 3.7.12,所有范例可使用 Google Colab 实作,不用安装任何软件 ( 参考:使用 Google Colab )
- 使用 Colab 操作需要连动 Google 云端硬盘,请参考:连动 Google Drive
安装 Pillow
输入下列指令安装 Pillow,根据个人环境使用 pip 或 pip3,如果使用 Colab 或 Anaconda Jupyter,已经内建 Pillow 函数库。
!pip install Pillow
使用 glob 取得所有文件的原始名称
程序里可以先使用 glob 标准函数库,执行后就会读取 demo 文件夹里所有的 jpg 文件 ( 范例 demo 文件夹内有一些需要转档的 jpg 图片 )。
参考:查找匹配文件 glob
import glob
# import os
# os.chdir('/content/drive/MyDrive/Colab Notebooks') # Colab 換路徑使用
jpg = glob.glob('./demo/*.[jJ][pP][gG]') # 使用 [jJ][pP][gG] 萬用字元,抓出副檔名不論大小寫的 jpg 檔案
print(images)
'''
['./demo/pic-001.jpg', './demo/pic-002.jpg', './demo/pic-003.jpg',
'./demo/pic-004.jpg', './demo/pic-005.jpg', './demo/pic-006.jpg',
'./demo/pic-007.jpg', './demo/pic-008.jpg', './demo/pic-009.jpg',
'./demo/pic-010.jpg']
'''
使用 Pillow 转换文件格式
修改上方的程序,import PIL 里的 Image 方法,使用 Image 打开文件,并在存档时指定副档名,搭配 for 循环,执行后就会将 jpg 文件批次转换成 png 的文件。
PIL 支援 jpg、png、gif、pdf、tiff、bmp、webp...等多种常见图片格式。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # Colab 換路徑使用
import glob
from PIL import Image
jpg = glob.glob('./demo/*.[jJ][pP][gG]')
print(jpg)
for i in jpg:
print(i)
im = Image.open(i) # 開啟圖片檔案
name = i.lower().split('/')[::-1][0] # 將檔名換成小寫 ( 避免 JPG 與 jpg 干擾 )
png = name.replace('jpg','png') # 取出圖片檔名,將 jpg 換成 png
im.save(f'./demo/png/{png}', 'png') # 轉換成 png 並存檔
批次压缩 jpg 图片
如果是转换为 jpg,可以额外设定 quality 和 subsampling 参数。
| 参数 | 范围 | 说明 |
|---|---|---|
| quality | 0~100 | 压缩质量,100 画质最好 ( 文件最大 ),0 画质最差 ( 文件最小 ),默认 75。 |
| subsampling | 0、1、2 | 二次采样,默认 0。 |
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # Colab 換路徑使用
import glob
from PIL import Image
jpg = glob.glob('./demo/*.[jJ][pP][gG]')
print(jpg)
for i in jpg:
print(i)
im = Image.open(i) # 開啟圖片檔案
name = i.split('/')[::-1][0] # 取出檔名
im.save(f'./demo/jpg/{name}', quality=65, subsampling=0) # 設定參數並存檔
小结
过去要处理大量图片转档或压缩,可能都要打开图像处理软件,透过 Python,面对大量图片的转档作业,也能够轻松处理了。
微信扫码关注
抖音扫码关注