Python使用Pillow庫批量處理圖片的示例詳解
大家好,今天要教大家一個超實用的技能 —— 使用Pillow庫來批量處理圖片。無論是調(diào)整圖片大小、添加水印,還是批量格式轉(zhuǎn)換,都能輕松搞定!讓我們一起進入圖片處理的奇妙世界吧!
一、準(zhǔn)備工作
首先安裝Pillow庫:
pip install Pillow
小貼士:Pillow是PIL(Python Imaging Library)的一個分支,但功能更強大、維護更活躍。
二、基礎(chǔ)圖片操作
讓我們從最基本的圖片操作開始:
from PIL import Image, ImageDraw, ImageFont
import os
def basic_image_ops(image_path):
"""
基礎(chǔ)圖片操作示例
"""
# 打開圖片
img = Image.open(image_path)
# 獲取圖片信息
print(f"圖片大?。簕img.size}")
print(f"圖片格式:{img.format}")
print(f"圖片模式:{img.mode}")
# 調(diào)整大小
resized_img = img.resize((800, 600))
# 旋轉(zhuǎn)圖片
rotated_img = img.rotate(45, expand=True)
# 裁剪圖片
cropped_img = img.crop((100, 100, 500, 500)) # (左, 上, 右, 下)
# 保存處理后的圖片
resized_img.save('resized.jpg')
rotated_img.save('rotated.jpg')
cropped_img.save('cropped.jpg')
# 使用示例
basic_image_ops('example.jpg')
三、批量調(diào)整圖片大小
在電商工作中,經(jīng)常需要把產(chǎn)品圖片統(tǒng)一調(diào)整為特定尺寸:
def batch_resize_images(input_folder, output_folder, size=(800, 600)):
"""
批量調(diào)整圖片大小
:param input_folder: 輸入文件夾路徑
:param output_folder: 輸出文件夾路徑
:param size: 目標(biāo)尺寸(寬,高)
"""
# 確保輸出文件夾存在
if not os.path.exists(output_folder):
os.makedirs(output_folder)
# 支持的圖片格式
supported_formats = {'.jpg', '.jpeg', '.png', '.bmp'}
success_count = 0
fail_count = 0
for filename in os.listdir(input_folder):
if any(filename.lower().endswith(fmt) for fmt in supported_formats):
try:
# 打開圖片
image_path = os.path.join(input_folder, filename)
img = Image.open(image_path)
# 保持縱橫比調(diào)整大小
img.thumbnail(size, Image.Resampling.LANCZOS)
# 保存處理后的圖片
output_path = os.path.join(output_folder, filename)
img.save(output_path, quality=95)
success_count += 1
print(f"成功處理:{filename}")
except Exception as e:
fail_count += 1
print(f"處理失敗 - {filename}: {str(e)}")
print(f"\n處理完成!成功:{success_count},失?。簕fail_count}")
# 使用示例
batch_resize_images('input_images', 'output_images', (1024, 768))
四、添加水印
保護圖片版權(quán),給圖片添加水?。?/p>
def add_watermark(image_path, watermark_text, output_path):
"""
給圖片添加文字水印
"""
# 打開圖片
img = Image.open(image_path)
# 創(chuàng)建繪圖對象
draw = ImageDraw.Draw(img)
# 加載字體(請確保字體文件存在)
try:
font = ImageFont.truetype('arial.ttf', 36)
except:
font = ImageFont.load_default()
# 計算水印位置(右下角)
text_width = draw.textlength(watermark_text, font=font)
text_height = 36
x = img.width - text_width - 20
y = img.height - text_height - 20
# 添加半透明文字
draw.text(
(x, y),
watermark_text,
fill=(255, 255, 255, 128), # 白色,半透明
font=font
)
# 保存圖片
img.save(output_path)
# 批量添加水印
def batch_add_watermark(input_folder, output_folder, watermark_text):
"""
批量給圖片添加水印
"""
if not os.path.exists(output_folder):
os.makedirs(output_folder)
for filename in os.listdir(input_folder):
if filename.lower().endswith(('.jpg', '.jpeg', '.png')):
input_path = os.path.join(input_folder, filename)
output_path = os.path.join(output_folder, f"watermarked_{filename}")
add_watermark(input_path, watermark_text, output_path)
五、高級技巧
1. 圖片格式轉(zhuǎn)換
def convert_format(input_path, output_format):
"""
轉(zhuǎn)換圖片格式
:param input_path: 輸入圖片路徑
:param output_format: 目標(biāo)格式(如'PNG')
"""
img = Image.open(input_path)
# 如果是PNG,保持透明通道
if output_format.upper() == 'PNG':
if img.mode in ('RGBA', 'LA'):
output_path = input_path.rsplit('.', 1)[0] + '.png'
img.save(output_path, output_format)
return
# 轉(zhuǎn)換為RGB模式(去除透明通道)
rgb_img = img.convert('RGB')
output_path = input_path.rsplit('.', 1)[0] + '.' + output_format.lower()
rgb_img.save(output_path, output_format)
2. 圖片優(yōu)化
def optimize_image(input_path, output_path, max_size_kb=500):
"""
優(yōu)化圖片大小,控制在指定KB以內(nèi)
"""
img = Image.open(input_path)
quality = 95
while True:
img.save(output_path, quality=quality)
size_kb = os.path.getsize(output_path) / 1024
if size_kb <= max_size_kb or quality <= 5:
break
quality -= 5
print(f"優(yōu)化完成:{size_kb:.2f}KB,質(zhì)量:{quality}")
練習(xí)小任務(wù)
嘗試實現(xiàn)以下功能:
- 給圖片添加圖片水印
- 批量為圖片添加邊框
- 制作圖片縮略圖畫廊
- 圖片色彩增強
實用技巧:
- 處理大量圖片時注意內(nèi)存使用
- 保持原圖備份
- 注意圖片質(zhì)量和文件大小的平衡
- 使用多線程提高處理速度
小結(jié)
今天我們學(xué)習(xí)了:
- 基礎(chǔ)圖片操作
- 批量調(diào)整圖片大小
- 添加水印
- 格式轉(zhuǎn)換和優(yōu)化
掌握了這些技能,你就能輕松處理各種圖片任務(wù)了!記住,實踐出真知,多動手試試不同的參數(shù)和效果!
到此這篇關(guān)于Python使用Pillow庫批量處理圖片的示例詳解的文章就介紹到這了,更多相關(guān)Python圖片處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于python的docx模塊處理word和WPS的docx格式文件方式
今天小編就為大家分享一篇基于python的docx模塊處理word和WPS的docx格式文件方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02
對pyqt5中QTabWidget的相關(guān)操作詳解
今天小編就為大家分享一篇對pyqt5中QTabWidget的相關(guān)操作詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06
python數(shù)據(jù)分析工具之 matplotlib詳解
對于 Python 來說,matplotlib 是最著名的繪圖庫,它主要用于二維繪圖,當(dāng)然也可以進行簡單的三維繪圖。這篇文章主要介紹了python數(shù)據(jù)分析工具之 matplotlib的相關(guān)知識,需要的朋友可以參考下2020-04-04
pytorch之torch_scatter.scatter_max()用法
這篇文章主要介紹了pytorch之torch_scatter.scatter_max()用法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09
Python制作數(shù)據(jù)預(yù)測集成工具(值得收藏)
這篇文章主要介紹了Python如何制作數(shù)據(jù)預(yù)測集成工具,幫助大家進行大數(shù)據(jù)預(yù)測,感興趣的朋友可以了解下2020-08-08
Python除法保留兩位小數(shù)點的三種方法實現(xiàn)
這篇文章主要給大家介紹了關(guān)于Python除法保留兩位小數(shù)點的三種方法實現(xiàn),在py應(yīng)用中有許多拿結(jié)果中的多個整數(shù)進行運算,難免少不了除法(如單位換算等),但是整數(shù)進行運算后只會返回整數(shù),一般結(jié)果基本需要精確到后兩位,需要的朋友可以參考下2023-08-08

