批次调整图片尺寸
这篇文章会介绍使用 Python 的 glob 标准函数库,搭配 Pillow 第三方函数库,实作可以将大量的图片,进行批次调整尺寸的功能。
- 本篇使用的 Python 版本为 3.7.12,所有范例可使用 Google Colab 实作,不用安装任何软件 ( 参考:使用 Google Colab )
- 使用 Colab 操作需要连动 Google 云端硬盘,请参考:连动 Google Drive
安装 Pillow
输入下列指令安装 Pillow,根据个人环境使用 pip 或 pip3,如果使用 Colab 或 Anaconda Jupyter,已经内建 Pillow 函数库。
!pip install Pillow
使用 size 取得图片尺寸
透过 Pillow Image 里的 size 方法,读取图片的长宽尺寸,取得的尺寸为 tuple 型别,尺寸的第一个数值为宽度,第二个数值为高度。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # Colab 換路徑使用
from PIL import Image
img = Image.open('oxxostudio.jpg') # 開啟圖片
print(img.size) # (1280,720) 印出長寬尺寸
使用 glob 标准函数库读取 demo 文件夹里所有的 jpg 文件,取得文件路径后,就能读取每一张图片的长宽尺寸。
参考:查找匹配文件 glob
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # Colab 換路徑使用
import glob
from PIL import Image
imgs = glob.glob('./oxxo/*.jpg') # 取得 demo 資料夾內所有的圖片
for i in imgs:
im = Image.open(i) # 依序開啟每一張圖片
size = im.size # 取得圖片尺寸
print(size)
使用 resize 调整图片尺寸
接着使用 Image 的 resize 方法,提供 tuple 型别的长宽数值,就能调整图片的尺寸。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # Colab 換路徑使用
from PIL import Image
img = Image.open('oxxostudio.jpg') # 開啟圖片
img2 = img.resize((200,200)) # 調整圖片尺寸為 200x200
img2.save('test.jpg') # 調整後存檔到 resize 資料夾
搭配 glob,就能一次将所有图片的尺寸调整为 200x200。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # Colab 換路徑使用
import glob
from PIL import Image
imgs = glob.glob('./oxxo/*.jpg')
for i in imgs:
im = Image.open(i)
size = im.size
name = i.split('/')[::-1][0] # 取得圖片的名稱
im2 = im.resize((200, 200)) # 調整圖片尺寸為 200x200
im2.save(f'./oxxo/resize/{name}') # 調整後存檔到 resize 資料夾
等比例调整图片尺寸
虽然上方的程序已经可以调整图片尺寸,但每一张图片经过调整都变成了单一 200x200 的正方形尺寸 ( 会出现压扁或拉长现象 ),如果要让每张图片等比例缩放,可以先行计算长宽的比例,再根据比例进行调整,执行后就会按照等比例缩放图片。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # Colab 換路徑使用
import glob
from PIL import Image
imgs = glob.glob('./oxxo/*.jpg')
for i in imgs:
im = Image.open(i)
size = im.size
max = 400 # 設定長或寬最大的數值
if size[0]>size[1]: # 如果原始圖片 width 大於 height
scale = size[1]/size[0] # 設定 scale 為 height/width
w = max # 設定調整後的寬度為最大的數值
h = int(max*scale) # 設定調整後的高度為 max 乘以 scale ( 使用 int 去除小數點 )
else: # 如果原始圖片 width 小於等於 height
scale = size[0]/size[1] # 設定 scale 為 width/height
w = int(max*scale) # 設定調整後的寬度為 max 乘以 scale ( 使用 int 去除小數點 )
h = max # 設定調整後的高度為最大的數值
name = i.split('/')[::-1][0]
im2 = im.resize((w, h)) # 調整尺寸
im2.save(f'./oxxo/resize/{name}')
小结
透过批次调整图片尺寸的方式,就能轻松建立许多大张图片的缩图,节省打开图像处理软件调整的时间。
微信扫码关注
抖音扫码关注