WebP là định dạng ảnh được nhiều website và ứng dụng sử dụng nhờ khả năng giảm dung lượng nhưng vẫn giữ chất lượng hiển thị tốt. Nếu cần chuyển đổi hàng chục hoặc hàng trăm ảnh JPG, việc thực hiện từng file sẽ khá mất thời gian.
Đoạn mã dưới đây sử dụng thư viện Pillow để tự động chuyển toàn bộ ảnh JPG/JPEG trong một thư mục sang WebP, đồng thời giữ nguyên tên file và không làm thay đổi ảnh gốc.
Đoạn mã này sẽ giúp bạn:
- Chuyển toàn bộ ảnh JPG/JPEG sang WebP.
- Giữ nguyên tên file sau khi chuyển đổi.
- Tự động tạo thư mục lưu ảnh mới.
- Không ghi đè lên ảnh gốc.
Chuẩn bị trước khi chạy
Đoạn mã sử dụng thư viện Pillow để đọc và chuyển đổi ảnh sang định dạng WebP. Nếu môi trường Python của bạn chưa cài thư viện này, hãy chạy lệnh:
pip install pillow
Sau khi cài đặt, bạn chỉ cần thay đổi đường dẫn thư mục và chạy chương trình.
Mã nguồn Python đầy đủ
from PIL import Image
import os
input_folder = r"D:\Images"
output_folder = r"D:\WebP"
os.makedirs(output_folder, exist_ok=True)
for file_name in os.listdir(input_folder):
```
if not file_name.lower().endswith((".jpg", ".jpeg")):
continue
input_path = os.path.join(input_folder, file_name)
if not os.path.isfile(input_path):
continue
output_name = os.path.splitext(file_name)[0] + ".webp"
output_path = os.path.join(output_folder, output_name)
with Image.open(input_path) as image:
image.save(
output_path,
"WEBP",
quality=85,
method=6
)
```
print("Hoàn thành!")
Kết quả sau khi chạy
Sau khi thực thi, tên file sẽ được giữ nguyên, chỉ thay đổi định dạng sang .webp.
Trước khi chuyển
san-go-egger.jpg
phong-khach.jpg
san-nhua-spc.jpeg
↓
Sau khi chuyển
san-go-egger.webp
phong-khach.webp
san-nhua-spc.webp
Những chỗ bạn có thể tùy chỉnh
Thay đổi thư mục chứa ảnh
Chỉ cần sửa hai dòng sau:
input_folder = r"D:\Images"
output_folder = r"D:\WebP"
Điều chỉnh chất lượng ảnh
Mặc định bài viết sử dụng quality = 85, đây là mức khá cân bằng giữa chất lượng hình ảnh và dung lượng tệp.
- 70 – 80: Ưu tiên giảm dung lượng.
- 85: Phù hợp với đa số website.
- 90 – 100: Chất lượng cao hơn nhưng file cũng lớn hơn.
Chuyển thêm định dạng PNG
Nếu muốn chuyển cả PNG, chỉ cần sửa điều kiện lọc:
if not file_name.lower().endswith(
(".jpg", ".jpeg", ".png")
):
continue
Có thể nâng cấp thêm
Từ đoạn mã này, bạn có thể phát triển thêm nhiều tính năng khác như:
- Resize ảnh trước khi chuyển đổi.
- Thêm watermark tự động.
- Đổi tên file theo chuẩn SEO.
- Giữ nguyên cấu trúc thư mục.
- Bỏ qua các ảnh đã chuyển trước đó.
- Xử lý nhiều thư mục cùng lúc.
Kết luận
Đây là một đoạn mã Python nhỏ nhưng khá hữu ích khi cần tối ưu số lượng lớn hình ảnh. Thay vì chuyển đổi từng file bằng phần mềm, bạn chỉ cần thay đổi đường dẫn thư mục và chạy chương trình để xử lý toàn bộ ảnh trong vài giây. Nếu thường xuyên làm việc với website, AI hoặc xử lý dữ liệu hình ảnh, bạn cũng có thể mở rộng đoạn mã này để tự động resize, thêm watermark hoặc đổi tên ảnh theo quy tắc riêng.
Xem thêm các bài viết khác:
Python: Resize Hàng Loạt Ảnh (Kèm Mã Nguồn)
Hướng dẫn cài đặt, sử dụng Pycharm lập trình Python