iT邦幫忙

2022 iThome 鐵人賽

DAY 2
0
Software Development

學 Python 到底可以幹麻勒?系列 第 2

( Day 2 ) 批次圖片轉檔 ( jpg、png、gif、pdf...等 )

  • 分享至 

  • xImage
  •  

這篇文章會介紹使用 Python 的 glob 標準函式庫,搭配 Pillow 第三方函式庫,實作可以一次將大量的圖片,批次轉檔的功能 ( jpg 轉 png、png 轉 pdf、jpg 轉 gif...等 ),轉檔過程中,也可以透過調整參數,實現批次壓縮 jpg 的效果。

原文參考:批次圖片轉檔 ( jpg、png、gif、pdf...等 )

Python 教學 - 批次圖片轉檔

安裝 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 的檔案。

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 並存檔

Python 教學 - 批次圖片轉檔

批次壓縮 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,面對大量圖片的轉檔作業,也能夠輕鬆處理了。

更多 Python 教學

大家好,我是 OXXO,是個即將邁入中年的斜槓青年,我已經寫了超過 400 篇 Python 的教學,有興趣可以參考下方連結呦~ ^_^


上一篇
( Day 1 ) 批次重新命名檔案
下一篇
( Day 3 ) 批次調整圖片尺寸
系列文
學 Python 到底可以幹麻勒?41
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言