Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Lọc hình ảnh dựa trên thuộc tính kích thước trong Python

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.