1. Xác định định dạng hình ảnh
Các định dạng hình ảnh được hỗ trợ
Pillow hỗ trợ làm việc với nhiều định dạng hình ảnh, bao gồm:
- JPEG (JPG): Một trong các định dạng phổ biến nhất cho ảnh. Nén ảnh với mất mát chất lượng nhưng giảm đáng kể kích thước tệp. Không hỗ trợ độ trong suốt.
- PNG: Định dạng không mất mát, hỗ trợ độ trong suốt (kênh alpha). Phù hợp cho logo, biểu tượng và hình ảnh cần độ rõ nét.
- BMP: Định dạng chất lượng cao không nén nhưng kích thước tệp lớn. Hỗ trợ độ trong suốt.
- TIFF: Phổ biến để lưu trữ hình ảnh không mất mát. Thường được sử dụng trong ngành in ấn.
- WEBP: Định dạng hiện đại với mức nén cao và hỗ trợ độ trong suốt. Phù hợp cho hình ảnh web nhờ kích thước tệp nhỏ gọn với chất lượng tốt.
Tải hình ảnh để chuyển đổi
Trước khi chuyển đổi hình ảnh, cần tải nó bằng phương thức Image.open()
.
from PIL import Image
# Mở hình ảnh
image = Image.open("example.jpg")
print(image.format) # Kiểm tra định dạng ban đầu của ảnh
2. Chuyển đổi hình ảnh sang định dạng khác
Phương thức save()
cho phép lưu ảnh trong các định dạng khác nhau, chỉ cần thay đổi phần mở rộng trong tên tệp hoặc chỉ rõ định dạng một cách rõ ràng.
Chuyển đổi JPEG sang PNG
Để chuyển đổi ảnh từ JPEG sang PNG, chỉ cần chỉ định phần mở rộng mới khi lưu tệp:
# Lưu hình ảnh dưới định dạng PNG
image.save("example_converted.png")
Đoạn code này chuyển đổi một hình ảnh từ định dạng JPEG sang định dạng PNG, lưu nó với tên chỉ định. PNG phù hợp để lưu trữ hình ảnh không mất mát, đồng thời hỗ trợ các khu vực trong suốt.
Chuyển đổi PNG sang JPEG
Việc chuyển đổi ảnh từ PNG sang JPEG cũng khả thi, nhưng cần lưu ý rằng JPEG không hỗ trợ tính năng trong suốt. Khi chuyển đổi, các khu vực trong suốt sẽ được lấp đầy bằng màu trắng.
# Chuyển đổi PNG sang JPEG (độ trong suốt sẽ được thay thế bằng nền trắng)
image = image.convert("RGB") # Chuyển sang chế độ RGB, cần thiết cho JPEG
image.save("example_converted.jpg", "JPEG")
Phương thức convert("RGB")
được sử dụng để chuyển đổi hình ảnh sang chế độ RGB, vì JPEG không hỗ trợ các khu vực trong suốt. Điều này là cần thiết để lưu tệp ở định dạng JPEG.
3. Quản lý chất lượng hình ảnh
Để tối ưu hóa hình ảnh, Pillow cung cấp các tham số quality
và optimize
, cho phép điều chỉnh chất lượng và kích thước tệp. Các tham số này đặc biệt hữu ích cho JPEG và PNG.
Tối ưu hóa và quản lý chất lượng JPEG
Khi lưu ảnh ở định dạng JPEG, tham số quality
điều chỉnh mức độ nén. Giá trị chất lượng càng cao thì kích thước tệp càng lớn và chất lượng hình ảnh càng tốt. Giá trị quality
dao động từ 1 đến 95 (mặc định là 75).
# Lưu hình ảnh JPEG với chất lượng giảm
image.save("example_compressed.jpg", "JPEG", quality=85)
Đoạn code này lưu hình ảnh với chất lượng 85, thường giữ được chất lượng tốt trong khi giảm kích thước file. Nếu cần chất lượng thấp hơn, ví dụ để tạo hình thu nhỏ, bạn có thể đặt quality = 50
.
Tối ưu hóa PNG
Đối với PNG, tham số optimize = True
thực hiện nén không mất mát, loại bỏ dữ liệu dư thừa. Điều này đặc biệt hữu ích khi xuất bản hình ảnh lên internet.
# Lưu file PNG tối ưu hóa
image.save("example_optimized.png", "PNG", optimize=True)
Tối ưu hóa PNG giúp giảm kích thước tệp mà không mất đi chất lượng, điều này đặc biệt quan trọng đối với logo và biểu tượng, nơi mỗi kilobyte đều có giá trị.
So sánh chất lượng JPEG với các mức nén khác nhau
Hãy xem xét cách thay đổi tham số quality
ảnh hưởng đến kích thước tệp và chất lượng hình ảnh.
# Lưu hình ảnh JPEG với các mức chất lượng khác nhau
image.save("quality_95.jpg", "JPEG", quality=95)
image.save("quality_75.jpg", "JPEG", quality=75)
image.save("quality_50.jpg", "JPEG", quality=50)
Trong ví dụ này, chúng ta lưu cùng một hình ảnh với ba mức chất lượng: 95, 75 và 50. Hình ảnh với chất lượng 95 sẽ gần như không có sự khác biệt so với bản gốc nhưng kích thước sẽ lớn hơn, trong khi chất lượng 50 sẽ dẫn đến nén đáng kể và có thể làm mất đi một số chi tiết.
4. Sử dụng định dạng WebP
Định dạng WebP là một định dạng hiện đại, hỗ trợ cả nén mất mát và không mất mát, cũng như độ trong suốt. Nó được sử dụng rộng rãi trên internet nhờ mức độ nén cao.
Chuyển đổi hình ảnh sang định dạng WebP
# Chuyển đổi hình ảnh sang WebP
image.save("example.webp", "WEBP", quality=80)
Trong ví dụ này, chúng ta lưu hình ảnh ở định dạng WebP với chất lượng 80. WebP cho phép đạt được kích thước tệp nhỏ hơn đáng kể so với JPEG hoặc PNG với chất lượng tương tự.
Ví dụ chuyển đổi đầy đủ với tối ưu hóa
Bây giờ chúng ta sẽ kết hợp tất cả các phương pháp đã thảo luận và tạo ra một script để chuyển đổi hình ảnh sang nhiều định dạng với tối ưu hóa.
from PIL import Image
# Mở hình ảnh
image = Image.open("example.jpg")
# Chuyển đổi sang PNG với tối ưu hóa
image.save("converted_optimized.png", "PNG", optimize=True)
# Chuyển đổi sang JPEG với chất lượng giảm
image_rgb = image.convert("RGB") # Chuyển sang chế độ RGB cho JPEG
image_rgb.save("converted_compressed.jpg", "JPEG", quality=85)
# Chuyển đổi sang WebP với tối ưu hóa chất lượng
image_rgb.save("converted_optimized.webp", "WEBP", quality=80)
Trong ví dụ này:
- Chúng ta chuyển đổi hình ảnh sang PNG với tối ưu hóa, giúp giảm kích thước tệp mà không mất đi chất lượng.
- Lưu hình ảnh ở định dạng JPEG với chất lượng 85, đảm bảo chất lượng tốt và kích thước tệp nhỏ.
- Chuyển đổi hình ảnh sang định dạng WebP, phù hợp để xuất bản trên internet, giữ chất lượng cao với kích thước tệp nhỏ.
GO TO FULL VERSION