Chuyển đổi JPG sang Base64

Mã hóa ảnh JPG và JPEG thành Base64. Giữ nguyên tệp gốc đến từng byte, hoặc mã hóa lại với chất lượng thấp hơn và chiều rộng nhỏ hơn để chuỗi ngắn gọn.

Chạy hoàn toàn trong trình duyệt của bạn. Không có gì được tải lên.

Cách sử dụng

  1. Thả tệp .jpg hoặc .jpeg vào vùng thả, nhấp để chọn tệp hoặc dán ảnh.
  2. Để giữ nguyên tệp như ban đầu, hãy để mục Chuyển sang ở tùy chọn Giữ định dạng gốc. Để thu nhỏ tệp, hãy chọn JPEG hoặc WebP và giảm Chất lượng.
  3. Đặt Chiều rộng tối đa nếu ảnh lớn hơn kích thước sẽ hiển thị.
  4. Sao chép đầu ra bạn cần, chẳng hạn thẻ img cho trang web hoặc Base64 thuần cho API, hoặc tải xuống dưới dạng tệp.

Sơ lược về JPEG

JPEG là định dạng tiêu chuẩn cho ảnh chụp. Định dạng này dùng nén mất dữ liệu, loại bỏ những chi tiết mắt người hầu như không nhận ra, và không hỗ trợ độ trong suốt. Tệp có đuôi .jpg, .jpeg hoặc đôi khi .jfif, nhưng kiểu MIME luôn là image/jpeg; image/jpg không phải kiểu đã được đăng ký, dù nhiều trình duyệt vẫn chấp nhận. Data URI của JPEG bắt đầu bằng data:image/jpeg;base64,/9j/, tức là dấu hiệu bắt đầu ảnh (start-of-image) đã được mã hóa.

Thu nhỏ ảnh chụp trước khi mã hóa

Ảnh chụp là nơi Base64 gây tốn kém nhất: một tệp JPEG 200 KB sẽ thành khoảng 270 KB văn bản. Hai thiết lập tạo ra khác biệt lớn nhất:

  • Chiều rộng tối đa. Giảm chiều rộng đi một nửa thì số điểm ảnh chỉ còn một phần tư. Một ảnh chụp bằng điện thoại rộng 4000 điểm ảnh hiếm khi cần dùng ở kích thước đó.
  • Chất lượng. Các giá trị khoảng 70 đến 80% thường trông giống bản gốc trên màn hình mà nhỏ hơn nhiều. Giá trị quá thấp sẽ gây ra hiện tượng vỡ khối.

Chuyển sang WebP ở mức chất lượng tương đương thường còn nhỏ hơn nữa. Hãy theo dõi dung lượng sau mã hóa hiển thị với từng thiết lập và giữ lại kết quả nhỏ nhất mà vẫn trông ổn.

Siêu dữ liệu EXIF

Ảnh chụp từ máy ảnh và điện thoại mang theo siêu dữ liệu EXIF: dòng máy, ngày giờ chụp và đôi khi cả tọa độ GPS. Nếu không chuyển đổi, đầu ra Base64 chứa các byte gốc, bao gồm cả siêu dữ liệu, và bất kỳ ai giải mã đều đọc được. Đó lại là điều bạn muốn khi cần đúng tệp gốc, chẳng hạn khi API kiểm tra mã băm hoặc đọc ngày chụp.

Khi chuyển đổi, trình duyệt mã hóa lại các điểm ảnh và dữ liệu EXIF không được giữ lại. Đầu ra nhỏ hơn và không còn tiết lộ nơi ảnh được chụp.

Khi nào data URI JPEG là đáng dùng

Phù hợp nhất là ảnh giữ chỗ làm mờ cỡ nhỏ (ảnh rộng 20 đến 40 điểm ảnh, được nhúng trực tiếp trong lúc ảnh đầy đủ tải chậm), ảnh thu nhỏ trong phản hồi JSON và các bản xuất HTML một tệp. Ảnh banner lớn và thư viện ảnh nên đặt trong tệp riêng để trình duyệt có thể lưu đệm.

# Python
import base64
with open('photo.jpg', 'rb') as f:
    uri = 'data:image/jpeg;base64,' + base64.b64encode(f.read()).decode('ascii')

Câu hỏi thường gặp

JPG và JPEG có giống nhau không?

Có. Đuôi .jpg ngắn hơn có từ thời các hệ thống chỉ cho phép phần mở rộng ba ký tự. Cả hai là cùng một định dạng với kiểu MIME image/jpeg.

Mã hóa Base64 có làm giảm chất lượng JPEG không?

Không. Base64 biểu diễn các byte của tệp mà không làm mất dữ liệu. Chất lượng chỉ thay đổi khi bạn chọn chuyển đổi, lúc đó ảnh được mã hóa lại với mức chất lượng bạn đặt.

Data URI JPEG có thể có nền trong suốt không?
Không, JPEG không có kênh alpha. Nếu cần độ trong suốt, hãy dùng PNG hoặc WebP.
Chuỗi Base64 có chứa vị trí chụp ảnh của tôi không?

Có thể. Nếu tệp JPEG gốc có dữ liệu GPS trong siêu dữ liệu EXIF và bạn mã hóa nguyên vẹn, vị trí sẽ nằm trong chuỗi. Chuyển đổi ảnh sẽ loại bỏ siêu dữ liệu EXIF.