Cách sử dụng
- Thả tệp .bmp vào vùng thả, nhấp để chọn tệp hoặc dán ảnh.
- Chọn PNG ở mục Chuyển sang để có kết quả không mất dữ liệu và nhỏ hơn nhiều, hoặc chọn Giữ định dạng gốc nếu hệ thống nhận yêu cầu BMP.
- So sánh dung lượng gốc với dung lượng sau mã hóa để thấy mức tiết kiệm.
- Sao chép hoặc tải xuống kết quả dưới dạng data URI, Base64 thuần, thẻ img, quy tắc CSS hoặc ảnh Markdown.
Tệp BMP là gì?
BMP là định dạng bitmap độc lập thiết bị của Windows. Định dạng này lưu điểm ảnh theo từng hàng, hầu như luôn không nén (có một chế độ nén run-length đơn giản cho ảnh 4 bit và 8 bit). Kiểu MIME là image/bmp, dù một số hệ thống báo là image/x-ms-bmp, và đầu ra Base64 bắt đầu bằng Qk, tức hai chữ cái BM đã được mã hóa.
Khi không nén, dung lượng tệp suy ra trực tiếp từ kích thước ảnh. Một ảnh 24 bit cỡ 800 x 600 điểm ảnh cần khoảng 1,4 MB, và chuỗi Base64 của nó gần 1,9 MB văn bản.
Chuyển sang PNG trước khi mã hóa
PNG cũng là định dạng không mất dữ liệu, nên một ảnh bitmap 24 bit thông thường khi chuyển sang PNG vẫn giữ chính xác các điểm ảnh trong khi tệp nhỏ đi, thường nhiều lần, và còn nhỏ hơn nữa với ảnh chụp màn hình và đồ họa màu phẳng. Với ảnh chụp được lưu dưới dạng BMP, JPEG hoặc WebP ở chất lượng tốt cho chuỗi còn ngắn hơn. Dung lượng gốc và dung lượng sau mã hóa hiển thị cho từng ảnh giúp bạn dễ thấy sự khác biệt.
Khi nào nên giữ BMP gốc
Một số nơi nhận cần đúng tệp bitmap: phần mềm Windows cũ, máy in nhãn và máy in hóa đơn, màn hình nhỏ điều khiển bằng vi điều khiển, hoặc dữ liệu kiểm thử phải khớp với tệp đến từng byte. Trong những trường hợp đó, hãy chọn Giữ định dạng gốc; khi đó đầu ra Base64 là bản sao chính xác của tệp. Mọi trình duyệt lớn đều hiển thị được ảnh data:image/bmp, nhưng với trang web và email thì PNG là định dạng tốt hơn.
Cùng phép chuyển đổi này trong một script, dùng Python và Pillow:
from PIL import Image
import base64, io
buf = io.BytesIO()
Image.open('scan.bmp').save(buf, 'PNG')
uri = 'data:image/png;base64,' + base64.b64encode(buf.getvalue()).decode()
Câu hỏi thường gặp
Vì sao chuỗi Base64 của BMP lại dài như vậy?
BMP lưu từng điểm ảnh mà không nén, và Base64 còn thêm một phần ba nữa. Chuyển sang PNG trước thường rút ngắn chuỗi đáng kể mà không mất bất kỳ chi tiết nào.
Chuyển BMP sang PNG có làm giảm chất lượng không?
Không. PNG là định dạng không mất dữ liệu, nên các điểm ảnh vẫn giữ nguyên. Chỉ cách lưu trữ chúng thay đổi.
Trình duyệt có hiển thị được URI data:image/bmp không?
Có, Chrome, Edge, Firefox và Safari đều hiển thị BMP. Ứng dụng email và nhiều nền tảng trực tuyến xử lý BMP kém ổn định hơn, nên ở đó PNG là lựa chọn an toàn hơn.
BMP có hỗ trợ độ trong suốt không?
BMP 32 bit có thể lưu kênh alpha, nhưng các chương trình và trình duyệt xử lý không nhất quán. Nếu cần độ trong suốt, hãy chuyển sang PNG hoặc WebP.