在現代數字時代,圖片已經成為我們日常生活和工作中不可或缺的一部分。無論是社交媒體、網站設計,還是文檔處理,圖片都扮演著重要的角色。然而,高分辨率的圖片往往會占用大量的存儲空間,并且在網絡上傳輸時可能會導致加載速度變慢。因此,圖片壓縮成為了一項重要的技術,它可以在不顯著降低圖片質量的情況下,大幅減小圖片的文件大小。
本文將詳細介紹如何使用Python代碼批量壓縮500張圖片。我們將使用Python中的Pillow
庫來實現這一功能。Pillow
是Python Imaging Library(PIL)的一個分支,提供了豐富的圖像處理功能。
在開始之前,我們需要確保已經安裝了Pillow
庫。如果還沒有安裝,可以使用以下命令進行安裝:
pip install pillow
在編寫代碼之前,我們需要導入一些必要的庫。除了Pillow
庫之外,我們還需要使用os
庫來處理文件路徑。
from PIL import Image
import os
接下來,我們需要定義一個函數來壓縮單張圖片。這個函數將接受圖片的路徑、輸出路徑以及壓縮質量作為參數。
def compress_image(input_path, output_path, quality=85):
"""
壓縮圖片并保存到指定路徑
:param input_path: 輸入圖片路徑
:param output_path: 輸出圖片路徑
:param quality: 壓縮質量,范圍是1-95,默認值為85
"""
try:
# 打開圖片
img = Image.open(input_path)
# 保存壓縮后的圖片
img.save(output_path, quality=quality)
print(f"圖片已壓縮并保存到: {output_path}")
except Exception as e:
print(f"壓縮圖片時出錯: {e}")
現在,我們已經有了壓縮單張圖片的函數,接下來我們需要編寫代碼來批量處理500張圖片。假設這些圖片都存儲在一個文件夾中,我們可以使用os
庫來遍歷文件夾中的所有圖片文件。
def batch_compress_images(input_folder, output_folder, quality=85):
"""
批量壓縮圖片
:param input_folder: 輸入文件夾路徑
:param output_folder: 輸出文件夾路徑
:param quality: 壓縮質量,范圍是1-95,默認值為85
"""
# 確保輸出文件夾存在
if not os.path.exists(output_folder):
os.makedirs(output_folder)
# 遍歷輸入文件夾中的所有文件
for filename in os.listdir(input_folder):
# 構建完整的文件路徑
input_path = os.path.join(input_folder, filename)
output_path = os.path.join(output_folder, filename)
# 只處理圖片文件
if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.gif', '.tiff')):
compress_image(input_path, output_path, quality)
else:
print(f"跳過非圖片文件: {filename}")
假設我們有一個名為images
的文件夾,里面存放了500張需要壓縮的圖片。我們希望將這些圖片壓縮后保存到compressed_images
文件夾中。我們可以使用以下代碼來實現這一目標:
input_folder = 'images'
output_folder = 'compressed_images'
quality = 75 # 可以根據需要調整壓縮質量
batch_compress_images(input_folder, output_folder, quality)
在實際應用中,我們可能需要對圖片進行更多的處理,例如調整圖片大小、轉換圖片格式等。Pillow
庫提供了豐富的功能來滿足這些需求。以下是一些常見的操作示例:
def resize_image(input_path, output_path, size=(800, 600)):
"""
調整圖片大小并保存到指定路徑
:param input_path: 輸入圖片路徑
:param output_path: 輸出圖片路徑
:param size: 目標大小,格式為(寬度, 高度)
"""
try:
img = Image.open(input_path)
img = img.resize(size, Image.ANTIALIAS)
img.save(output_path)
print(f"圖片已調整大小并保存到: {output_path}")
except Exception as e:
print(f"調整圖片大小時出錯: {e}")
def convert_image_format(input_path, output_path, format='JPEG'):
"""
轉換圖片格式并保存到指定路徑
:param input_path: 輸入圖片路徑
:param output_path: 輸出圖片路徑
:param format: 目標格式,例如'JPEG', 'PNG'
"""
try:
img = Image.open(input_path)
img.save(output_path, format=format)
print(f"圖片已轉換格式并保存到: {output_path}")
except Exception as e:
print(f"轉換圖片格式時出錯: {e}")
我們可以將上述功能整合到一個函數中,以便在一次遍歷中完成多種操作。
def batch_process_images(input_folder, output_folder, quality=85, size=None, format=None):
"""
批量處理圖片
:param input_folder: 輸入文件夾路徑
:param output_folder: 輸出文件夾路徑
:param quality: 壓縮質量,范圍是1-95,默認值為85
:param size: 目標大小,格式為(寬度, 高度),默認為None
:param format: 目標格式,例如'JPEG', 'PNG',默認為None
"""
# 確保輸出文件夾存在
if not os.path.exists(output_folder):
os.makedirs(output_folder)
# 遍歷輸入文件夾中的所有文件
for filename in os.listdir(input_folder):
# 構建完整的文件路徑
input_path = os.path.join(input_folder, filename)
output_path = os.path.join(output_folder, filename)
# 只處理圖片文件
if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.gif', '.tiff')):
try:
img = Image.open(input_path)
# 調整大小
if size:
img = img.resize(size, Image.ANTIALIAS)
# 轉換格式
if format:
output_path = os.path.splitext(output_path)[0] + '.' + format.lower()
# 保存圖片
img.save(output_path, quality=quality)
print(f"圖片已處理并保存到: {output_path}")
except Exception as e:
print(f"處理圖片時出錯: {e}")
else:
print(f"跳過非圖片文件: {filename}")
通過本文的介紹,我們學習了如何使用Python代碼批量壓縮500張圖片。我們使用了Pillow
庫來實現圖片的壓縮、調整大小和格式轉換等功能。這些技術不僅可以應用于圖片壓縮,還可以擴展到其他圖像處理任務中。
在實際應用中,我們可以根據具體需求對代碼進行進一步的優化和擴展。例如,我們可以添加更多的錯誤處理機制,或者將代碼封裝成一個獨立的工具類,以便在其他項目中復用。
希望本文對你有所幫助,祝你在Python圖像處理的學習和實踐中取得更多的成果!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。