Python自動(dòng)化圖片處理:解放你的重復(fù)勞動(dòng)
天天處理圖片煩不煩?改個(gè)尺寸要點(diǎn)一百次,重命名要手動(dòng)改半天,壓縮圖片更是折磨人。今兒給大伙兒介紹個(gè)省心利器 —— 用 Python 來(lái)解放你的雙手!
先把'兵器'準(zhǔn)備好
咱們這次主要用這幾個(gè)庫(kù),安裝很簡(jiǎn)單:
pip install Pillow
pip install pathlib
溫馨提示:用 pathlib 處理文件路徑比傳統(tǒng)的 os 模塊優(yōu)雅多了,用了就知道!
批量重命名:告別手動(dòng)改名時(shí)代
還在手動(dòng)改名字?太土了!看看這招:
from pathlib import Path
def batch_rename(folder_path, prefix='IMG_'):
# 創(chuàng)建目錄對(duì)象
folder = Path(folder_path)
# 遍歷所有圖片文件
for idx, img_path in enumerate(folder.glob('*.jpg')):
# 新名字:前綴 + 序號(hào),例如:IMG_001.jpg
new_name = f'{prefix}{idx:03d}{img_path.suffix}'
# 重命名
img_path.rename(folder / new_name)
print(f'已重命名: {img_path.name} -> {new_name}')
# 使用示例
batch_rename('我的照片集')
這下不管多少?gòu)垐D片,秒秒鐘的事!
批量調(diào)整尺寸:一鍵處理百?gòu)垐D
領(lǐng)導(dǎo)說(shuō)圖片太大傳不上去?來(lái),一招解決:
from PIL import Image
from pathlib import Path
def resize_images(folder_path, max_size=800):
folder = Path(folder_path)
# 創(chuàng)建輸出文件夾
output_folder = folder / '已調(diào)整'
output_folder.mkdir(exist_ok=True)
for img_path in folder.glob('*.jpg'):
# 打開(kāi)圖片
with Image.open(img_path) as img:
# 計(jì)算新尺寸,保持比例
ratio = max_size / max(img.size)
if ratio < 1: # 只縮小,不放大
new_size = tuple(int(x * ratio) for x in img.size)
# 調(diào)整大小并保存
img_resized = img.resize(new_size, Image.Resampling.LANCZOS)
save_path = output_folder / img_path.name
img_resized.save(save_path, quality=95)
print(f'已處理: {img_path.name}')
# 使用示例
resize_images('度假照片')
圖片壓縮:讓文件小下來(lái)
微信朋友圈發(fā)圖片總提示太大?這波操作安排上:
from PIL import Image
from pathlib import Path
def compress_images(folder_path, quality=80):
folder = Path(folder_path)
# 創(chuàng)建壓縮后的文件夾
compressed_folder = folder / '已壓縮'
compressed_folder.mkdir(exist_ok=True)
for img_path in folder.glob('*.jpg'):
# 打開(kāi)并壓縮
with Image.open(img_path) as img:
save_path = compressed_folder / img_path.name
# 壓縮保存
img.save(save_path, 'JPEG', quality=quality, optimize=True)
# 顯示壓縮效果
original_size = img_path.stat().st_size / 1024 # KB
compressed_size = save_path.stat().st_size / 1024 # KB
ratio = (1 - compressed_size/original_size) * 100
print(f'{img_path.name}: {original_size:.1f}KB -> {compressed_size:.1f}KB '
f'(節(jié)省{ratio:.1f}%)')
# 使用示例
compress_images('手機(jī)相冊(cè)')
終極大招:文件分類(lèi)整理器
照片太多整理不過(guò)來(lái)?這個(gè)神器幫你自動(dòng)分類(lèi):
from PIL import Image
from pathlib import Path
from datetime import datetime
def organize_photos(folder_path):
folder = Path(folder_path)
# 遍歷所有圖片
for img_path in folder.glob('*.jpg'):
try:
# 獲取照片拍攝時(shí)間
with Image.open(img_path) as img:
if hasattr(img, '_getexif') and img._getexif():
exif = img._getexif()
if 36867 in exif: # 拍攝時(shí)間的EXIF標(biāo)簽
date_str = exif[36867]
date_obj = datetime.strptime(date_str, '%Y:%m:%d %H:%M:%S')
# 按年月建文件夾
year_month = date_obj.strftime('%Y-%m')
new_folder = folder / year_month
new_folder.mkdir(exist_ok=True)
# 移動(dòng)文件
img_path.rename(new_folder / img_path.name)
print(f'已移動(dòng) {img_path.name} 到 {year_month}')
except Exception as e:
print(f'處理 {img_path.name} 時(shí)出錯(cuò): {e}')
# 使用示例
organize_photos('所有照片')
全家桶:一鍵處理所有操作
想一次性搞定所有操作?給你準(zhǔn)備了個(gè)全家桶:
def photo_processor(folder_path):
print('?? 開(kāi)始處理圖片...')
# 先整理分類(lèi)
print('\n?? 正在整理照片...')
organize_photos(folder_path)
# 統(tǒng)一調(diào)整大小
print('\n?? 正在調(diào)整尺寸...')
resize_images(folder_path)
# 最后壓縮
print('\n??? 正在壓縮圖片...')
compress_images(folder_path)
print('\n? 所有操作已完成!')
# 一鍵啟動(dòng)
photo_processor('我的相冊(cè)')
小貼士
- 處理之前最好先備份,萬(wàn)一寫(xiě)錯(cuò)代碼把照片搞沒(méi)了多尷尬
- 壓縮質(zhì)量建議設(shè)在 75-85 之間,再低圖片就糊了
- 批量處理時(shí)注意看看內(nèi)存夠不夠,文件太多的話最好分批處理
- 可以把這些代碼保存成腳本,需要時(shí)隨時(shí)調(diào)用
結(jié)語(yǔ)
這些自動(dòng)化操作可能剛開(kāi)始用著別扭,但只要習(xí)慣了,保證你再也不想手動(dòng)處理圖片!要是覺(jué)得這些代碼還不夠用,咱下次再聊聊更高級(jí)的玩法,比如圖片智能裁剪、添加水印、自動(dòng)美化等操作~
如果這篇文章對(duì)你有幫助,別忘了點(diǎn)個(gè)贊!有問(wèn)題也可以留言討論,咱們一起進(jìn)步!