Giới thiệu về xử lý hình ảnh với Pillow
Python cung cấp nhiều thư viện xử lý hình ảnh như Pillow, Python Imaging Library (PIL), scikit-image và OpenCV. Trong bài viết này, chúng ta sẽ sử dụng thư viện Pillow vì nó cung cấp nhiều thủ tục chuẩn để thao tác hình ảnh và hỗ trợ nhiều định dạng file như JPEG, PNG, GIF, TIFF, BMP và nhiều hơn nữa.
Pillow được xây dựng dựa trên PIL và cung cấp nhiều tính năng hơn so với thư viện gốc.
Cài đặt Pillow
Cài đặt Pillow qua pip:
$ pip install pillow
Các thao tác cơ bản với Pillow
Dưới đây là ví dụ minh họa các thao tác cơ bản:
from PIL import Image # Mở file hình ảnh image = Image.open(r"C:\Users\rajesh\Desktop\imagefolder\beach-parga.jpg") image.show() # Định dạng file nguồn print(image.format) # Output: JPEG # Định dạng pixel (mode) print(image.mode) # Output: RGB # Kích thước hình ảnh (width, height) print(image.size) # Output: (2048, 1365) # Bảng màu (palette) print(image.palette) # Output: None
Kết quả đầu ra
JPEG RGB (2048, 1365) None
Lọc và thay đổi kích thước hình ảnh
Chương trình dưới đây sẽ giảm kích thước tất cả hình ảnh trong một thư mục cụ thể (mặc định là thư mục làm việc hiện tại). Bạn có thể tùy chỉnh max_height, max_width hoặc phần mở rộng file.
Mã nguồn
import os
from PIL import Image
max_height = 900
max_width = 900
extensions = ['JPG']
path = os.path.abspath(".")
def adjusted_size(width, height):
"""Tính toán kích thước mới giữ nguyên tỷ lệ"""
if width > max_width or height > max_height:
if width > height:
return max_width, int(max_width * height / width)
else:
return int(max_height * width / height), max_height
else:
return width, height
if __name__ == "__main__":
for img in os.listdir(path):
if os.path.isfile(os.path.join(path, img)):
img_text, img_ext = os.path.splitext(img)
img_ext = img_ext[1:].upper()
if img_ext in extensions:
print(img)
image = Image.open(os.path.join(path, img))
width, height = image.size
image = image.resize(adjusted_size(width, height))
image.save(os.path.join(path, img))
Kết quả
another_Bike.jpg clock.JPG myBike.jpg Top-bike-wallpaper.jpg
Sau khi chạy script, tất cả hình ảnh JPG trong thư mục hiện tại sẽ có kích thước tối đa 900px (chiều rộng hoặc chiều cao) đồng thời giữ nguyên tỷ lệ khung hình.