CodeGym /Khóa học Java /Python SELF VI /Thay đổi kích thước ảnh

Thay đổi kích thước ảnh

Python SELF VI
Mức độ , Bài học
Có sẵn

1. Tải và lưu ảnh

Để tải ảnh trong Pillow, sử dụng class Image. Sau khi tải, bạn có thể chuyển đổi và lưu ảnh ở các định dạng khác nhau. Cùng xem qua các thao tác cơ bản về tải và lưu ảnh.

Tải ảnh

Để tải ảnh, sử dụng method Image.open(). Nó cho phép mở ảnh ở bất kỳ định dạng nào được hỗ trợ.

Python

from PIL import Image

# Mở ảnh
image = Image.open("example.jpg")

# In thông tin về ảnh
print(image.format)  # Định dạng ảnh, ví dụ: JPEG hoặc PNG
print(image.size)    # Kích thước ảnh (chiều rộng, chiều cao)
print(image.mode)    # Chế độ màu, ví dụ: RGB hoặc Grayscale

Đoạn code này tải ảnh example.jpg và hiển thị các thông tin chính của ảnh: định dạng, kích thước và chế độ màu. Nếu ảnh không nằm trong cùng thư mục, hãy chỉ định đường dẫn đầy đủ tới tệp.

Lưu ảnh

Sau khi tải và chỉnh sửa ảnh, bạn có thể lưu nó ở bất kỳ định dạng nào được hỗ trợ, chỉ cần chỉ định phần mở rộng trong tên tệp. Method save() cho phép đặt tên và định dạng cho tệp đầu ra.

Python

# Lưu ảnh ở định dạng khác
image.save("example.png")  # Lưu ảnh ở định dạng PNG

Bạn cũng có thể thay đổi chất lượng của ảnh lưu để giảm kích thước tệp, điều này đặc biệt hữu ích với ảnh định dạng JPEG.

Python

# Lưu với chất lượng thấp hơn
image.save("compressed_example.jpg", quality=85)  # Giá trị quality nằm trong khoảng từ 1 đến 95

2. Chỉnh kích thước ảnh

Chỉnh kích thước là một trong những nhiệm vụ phổ biến nhất khi làm việc với ảnh. Pillow cung cấp nhiều cách để chỉnh kích thước, bao gồm thay đổi cụ thể chiều rộng và chiều cao, thay đổi kích thước theo tỷ lệ và tạo thumbnail.

Chỉnh kích thước bằng method resize()

Method resize() cho phép bạn chỉ định kích thước chính xác của ảnh (chiều rộng và chiều cao), nhưng ảnh có thể bị méo nếu kích thước mới không giữ nguyên tỷ lệ gốc.

Python

# Thiết lập kích thước mới
new_size = (800, 600)
resized_image = image.resize(new_size)

# Lưu ảnh đã chỉnh kích thước
resized_image.save("resized_example.jpg")

Trong ví dụ này, ảnh được chỉnh kích thước thành 800x600 pixels và được lưu dưới dạng tệp mới. Nếu ảnh gốc có tỷ lệ khác, nó sẽ bị kéo dài hoặc nén lại để phù hợp với kích thước mới.

Chỉnh kích thước theo tỷ lệ với thumbnail()

Để chỉnh kích thước ảnh mà vẫn giữ nguyên tỷ lệ, sử dụng method thumbnail(). Method này tự động giảm kích thước ảnh sao cho phù hợp với kích thước được chỉ định, đồng thời giữ nguyên tỷ lệ gốc. Điều này đặc biệt hữu ích để tạo thumbnail của ảnh.

Python

# Tạo thumbnail với kích thước tối đa là 400x400 pixels
image.thumbnail((400, 400))

# Lưu thumbnail
image.save("thumbnail_example.jpg")

Method thumbnail() chỉnh sửa ảnh "trực tiếp", nghĩa là các thay đổi xảy ra trong object image gốc. Sau khi thực hiện thumbnail(), Pillow giảm kích thước ảnh sao cho không vượt quá 400x400 pixels, giữ nguyên tỷ lệ gốc.

Chỉnh kích thước với tỷ lệ giữ nguyên bằng ImageOps.fit()

Đôi khi, bạn cần chỉnh kích thước ảnh sao cho nó khớp hoàn toàn với kích thước được chỉ định, nhưng vẫn giữ nguyên tỷ lệ bằng cách cắt bớt các phần thừa. Trong trường hợp này, có thể sử dụng method ImageOps.fit().

Python

from PIL import ImageOps

# Thiết lập kích thước mới
target_size = (400, 400)
fitted_image = ImageOps.fit(image, target_size, method=Image.LANCZOS)

# Lưu ảnh đã cắt
fitted_image.save("fitted_example.jpg")

Method ImageOps.fit() tự động cắt ảnh để nó khớp với kích thước được chỉ định mà không bị méo. Ví dụ, nếu ảnh gốc là hình chữ nhật, method này sẽ cắt các cạnh để biến ảnh thành hình vuông và khớp với kích thước 400x400 pixels.

3. Ví dụ mã đầy đủ

Dưới đây là ví dụ về mã kết hợp tất cả các method đã xem — từ tải, chỉnh kích thước đến lưu ảnh.

Python

from PIL import Image, ImageOps

# Mở ảnh
image = Image.open("example.jpg")

# Chỉnh kích thước mà không giữ tỷ lệ
resized_image = image.resize((800, 600))
resized_image.save("resized_example.jpg")

# Giảm kích thước ảnh theo tỷ lệ
image.thumbnail((400, 400))
image.save("thumbnail_example.jpg")

# Chỉnh kích thước với cắt theo kích thước yêu cầu
fitted_image = ImageOps.fit(image, (400, 400), method=Image.LANCZOS)
fitted_image.save("fitted_example.jpg")

Giải thích về các method chỉnh kích thước

  1. resize(): cho phép đặt kích thước tùy ý, nhưng có thể dẫn đến méo ảnh nếu kích thước mới không khớp với tỷ lệ gốc.
  2. thumbnail(): chỉnh kích thước ảnh, giữ nguyên tỷ lệ. Hữu ích để tạo thumbnail và giảm kích thước ảnh lớn.
  3. ImageOps.fit(): chỉnh kích thước ảnh với cắt cạnh để khớp với kích thước chỉ định. Dùng khi cần khớp chính xác kích thước mà không bị méo.

4. Mẹo:

Ứng dụng thực tế của việc chỉnh kích thước ảnh

  1. Tối ưu hóa ảnh cho website: Ảnh lớn có thể làm chậm tốc độ tải trang, vì vậy cần tối ưu hóa bằng cách giảm kích thước ảnh mà không làm giảm chất lượng.
  2. Tạo thumbnail cho bộ sưu tập: Sử dụng thumbnail() để nhanh chóng tạo thumbnail của ảnh, hiển thị trong phần xem trước.
  3. Điều chỉnh ảnh theo kích thước cố định: Khi cần điều chỉnh ảnh theo kích thước cố định, ví dụ như ảnh đại diện hoặc profile, method ImageOps.fit() cho phép cắt và chỉnh kích thước ảnh để phù hợp với yêu cầu.

Mẹo chọn method

Sử dụng resize() khi bạn cần đặt chính xác chiều rộng và chiều cao của ảnh mà không quan tâm đến việc tỷ lệ bị thay đổi.

Áp dụng thumbnail() để tạo thumbnail hoặc khi muốn giảm kích thước ảnh mà vẫn giữ nguyên tỷ lệ.

Sử dụng ImageOps.fit() khi cần ảnh với kích thước cụ thể nhưng không bị biến dạng tỷ lệ. Method này cắt các phần thừa, rất tiện để điều chỉnh ảnh vào khung yêu cầu.

Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION