[chatGPT 測試] 自動縮圖片到指定的解析度 無法使用,手動修正

寫一隻 Windows下的python 要有下面功能
1.掃瞄指定資料匣下所有的圖片檔,進行檔案縮放
2.縮放後的圖檔最大長寬為1920,等比縮放
3.在原路徑下儲存,檔名後面加入”_R”做新檔名
4.轉換機式為 .jpg
5.解析度72dpi
6.壓縮品質 70%
7.EXIF要保留
8.檔案已存在,則略過
9.已轉過的檔案,則略過
—–
pip install pillow
安裝pillow
—–

import os
from PIL import Image
from PIL.ExifTags import TAGS

def process_image(input_path, output_path):
with Image.open(input_path) as img:
# 保存 EXIF 資訊
exif_data = img.info.get(‘exif’)

# 獲取當前尺寸
width, height = img.size

# 計算縮放比例
max_dimension = 1920
if max(width, height) > max_dimension:
if width > height:
new_width = max_dimension
new_height = int((max_dimension / width) * height)
else:
new_height = max_dimension
new_width = int((max_dimension / height) * width)
else:
new_width, new_height = width, height

# 等比縮放圖像
img = img.resize((new_width, new_height), Image.ANTIALIAS)

# 設定解析度
img.info[‘dpi’] = (72, 72)

# 保存為 .jpg 格式,設定品質為 70%,保留 EXIF 資訊
img.save(output_path, format=’JPEG’, quality=70, dpi=(72, 72), exif=exif_data)
print(f”Processed image saved as: {output_path}”)

def process_images_in_folder(folder_path):
# 支持的圖片格式
supported_formats = (‘.png’, ‘.jpg’, ‘.jpeg’, ‘.bmp’, ‘.gif’, ‘.tiff’)

# 掃描資料夾中的所有文件
for root, dirs, files in os.walk(folder_path):
for file in files:
if file.lower().endswith(supported_formats):
input_path = os.path.join(root, file)
base, ext = os.path.splitext(input_path)
output_path = f”{base}_R.jpg”

# 檢查是否已經處理過
if os.path.exists(output_path):
print(f”File {output_path} already exists, skipping.”)
continue

# 檢查是否已經轉換過
if base.endswith(‘_R’):
print(f”File {input_path} is already processed, skipping.”)
continue

process_image(input_path, output_path)

# 範例使用
folder_path = ‘path_to_your_folder’ # 請將此處的資料夾路徑替換為您的圖片資料夾路徑
process_images_in_folder(folder_path)
—-
出現錯誤碼
Traceback (most recent call last):
File “D:\pic_convert.py”, line 61, in <module>
process_images_in_folder(folder_path)
File “D:\pic_convert.py”, line 57, in process_images_in_folder
process_image(input_path, output_path)
File “D:\pic_convert.py”, line 26, in process_image
img = img.resize((new_width, new_height), Image.ANTIALIAS)
^^^^^^^^^^^^^^^
AttributeError: module ‘PIL.Image’ has no attribute ‘ANTIALIAS’
—-
查詢到相關文件

原來是pillow v10,就沒有Image.ANTIALIAS
我改成Image.LANCZOS
就可以執行程式了

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *