Chuyển ảnh sang Base64 và ngược lại: data URI, dòng CSS và khi nào nên nhúng ảnh
Công cụ chuyển ảnh sang chuỗi Base64 dạng data URI để nhúng thẳng vào HTML, CSS hay JSON, và chuyển ngược từ chuỗi Base64 về ảnh để xem trước rồi tải xuống. Ảnh được đọc bằng trình duyệt nên không có bước tải lên máy chủ, phù hợp cả với ảnh nội bộ chưa công bố.
Tính năng nổi bật
- Chọn ảnh từ máy và nhận ngay chuỗi data URI đầy đủ, nhận PNG, JPG, GIF và WebP
- Hiện tên tệp, dung lượng tính theo kilobyte và kiểu MIME của ảnh vừa chọn
- Ba nút sao chép riêng: chuỗi thô, data URI đầy đủ, và dòng CSS background-image dùng được ngay
- Dán chuỗi Base64 hoặc data URI vào để xem trước ảnh, tự nhận diện cả hai dạng
- Tải ảnh đã giải mã về máy dưới dạng tệp PNG
- Xem trước ảnh ngay khi dán, phát hiện chuỗi hỏng vì ảnh sẽ không hiện lên
- Xử lý hoàn toàn trong trình duyệt bằng bộ đọc tệp sẵn có, không gửi ảnh đi đâu
Base64 giải quyết vấn đề gì với ảnh
Có những nơi chỉ nhận được văn bản chứ không nhận được tệp nhị phân: một trường trong JSON gửi qua API, một ô trong tệp cấu hình, một khối CSS nội tuyến trong thư điện tử, hay một tệp HTML đơn lẻ cần gửi cho khách mà không kèm thư mục ảnh. Base64 là cách biểu diễn dữ liệu nhị phân bằng 64 ký tự an toàn, nhờ đó ảnh đi được qua những đường ống vốn chỉ dành cho chữ. Trong công việc hằng ngày, ba tình huống hay gặp nhất là nhúng biểu tượng nhỏ vào CSS để bớt một lượt tải, gắn ảnh chữ ký vào mẫu thư điện tử, và dựng bản mẫu HTML một tệp gửi qua tin nhắn. Cái giá phải trả là chuỗi Base64 luôn nặng hơn tệp gốc, nên đây là kỹ thuật dùng có chọn lọc chứ không phải cách tối ưu ảnh.
Lợi ích khi sử dụng
- Nhúng được ảnh vào nơi chỉ nhận văn bản như JSON, YAML hay mẫu thư điện tử
- Gửi một tệp HTML duy nhất mà ảnh vẫn hiển thị, không cần kèm thư mục
- Lấy sẵn dòng CSS đúng cú pháp thay vì tự ghép chuỗi và dễ sai dấu nháy
- Kiểm tra nhanh một chuỗi Base64 lạ xem nó thật sự là ảnh gì trước khi dùng
- Ảnh chưa công bố vẫn an toàn vì không có bước tải lên máy chủ nào
Cách chuyển ảnh sang Base64 và ngược lại
- 1Ở tab ảnh sang Base64, bấm vào khung nét đứt để chọn tệp ảnh từ máy của bạn.
- 2Đọc thông tin tệp hiện ra gồm tên, dung lượng và kiểu MIME, rồi xem chuỗi kết quả trong ô bên phải.
- 3Chọn đúng nút sao chép theo nhu cầu: chuỗi thô để đưa vào trường JSON, data URI để dán vào thuộc tính src, hoặc dòng CSS để dán thẳng vào biểu định kiểu.
- 4Muốn làm chiều ngược lại, chuyển sang tab Base64 sang ảnh rồi dán chuỗi vào ô bên trái.
- 5Kiểm tra ảnh hiện ở khung xem trước, nếu đúng thì bấm tải ảnh để lưu tệp về máy.
Cấu trúc một data URI và ba dạng chuỗi khác nhau
Một data URI đầy đủ có bốn phần nối liền: từ khóa data kèm dấu hai chấm, kiểu MIME của tệp, từ khóa base64 sau dấu chấm phẩy, rồi dấu phẩy và cuối cùng là chuỗi mã hóa. Ví dụ một ảnh PNG bắt đầu bằng data hai chấm image gạch chéo png chấm phẩy base64 phẩy rồi tới chuỗi ký tự. Ba nút sao chép trong công cụ cho ba dạng khác nhau và dùng nhầm là lỗi phổ biến. Nút sao chép Base64 cho chuỗi mà bộ đọc tệp trả về, tức đã có sẵn phần tiền tố data URI ở đầu. Nút sao chép data URI cho cùng chuỗi đó, và nếu bạn dán vào một chuỗi thô chưa có tiền tố thì nó tự thêm phần tiền tố của PNG vào. Nút sao chép CSS bọc data URI trong cú pháp url và dấu nháy đơn kèm thuộc tính background-image, dán vào biểu định kiểu là chạy. Khi cần đưa vào một trường JSON mà phía nhận đã tự biết kiểu ảnh, nhiều hệ thống chỉ muốn phần chuỗi sau dấu phẩy, lúc đó bạn phải tự cắt bỏ phần tiền tố.
Vì sao chuỗi Base64 luôn nặng hơn tệp gốc
Base64 biểu diễn mỗi 3 byte dữ liệu gốc bằng 4 ký tự, tức mỗi ký tự chỉ mang 6 bit thông tin thay vì 8. Tỷ lệ đó làm dữ liệu phình ra đúng một phần ba, cộng thêm phần đệm bằng dấu bằng ở cuối và phần tiền tố data URI. Trên thực tế bạn nên tính chuỗi kết quả nặng khoảng 1,33 tới 1,37 lần tệp gốc: ảnh 30 kilobyte cho chuỗi cỡ 40 kilobyte, ảnh 300 kilobyte cho chuỗi cỡ 400 kilobyte. Đây là lý do không nên nhúng ảnh lớn. Một điểm nữa ít người để ý: ảnh nhúng trong CSS hoặc HTML không được trình duyệt lưu đệm riêng như một tệp độc lập, nó bị lưu đệm chung với tệp chứa nó. Nghĩa là mỗi lần bạn sửa một dòng CSS, toàn bộ ảnh nhúng bên trong cũng phải tải lại. Với ảnh tách riêng thì ngược lại, chỉ tệp CSS được tải lại còn ảnh vẫn dùng bản đã lưu. Kết luận thực tế là chỉ nhúng những ảnh nhỏ và gần như không bao giờ thay đổi.
Khi nào nên nhúng và khi nào nên để ảnh riêng
Nên nhúng khi ảnh rất nhỏ, thường dưới khoảng 5 kilobyte, và xuất hiện ở phần hiển thị đầu tiên của trang, ví dụ biểu tượng mũi tên, hình nền lặp, hay logo đơn sắc; ở kích thước đó phần dữ liệu phình thêm còn nhỏ hơn chi phí thiết lập một lượt kết nối riêng. Nên nhúng khi tệp phải đứng độc lập: một trang HTML gửi qua tin nhắn, một báo cáo xuất ra một tệp duy nhất, một chữ ký thư điện tử. Nên nhúng khi ảnh phải đi kèm dữ liệu qua API dưới dạng JSON, chẳng hạn ảnh chụp giấy tờ gửi lên trong một biểu mẫu. Ngược lại, nên để ảnh riêng khi ảnh lớn, khi ảnh dùng lại ở nhiều trang, khi nội dung có thể thay đổi, hoặc khi bạn cần trình duyệt tải song song và tải trễ những ảnh nằm dưới màn hình. Với ảnh nội dung của website, việc để riêng còn cần thiết vì ảnh nhúng trong CSS không có địa chỉ riêng nên không xuất hiện được trong kết quả tìm kiếm ảnh và không đặt được thuộc tính mô tả thay thế.
SVG là ngoại lệ đáng lưu ý
Với ảnh vector dạng SVG, mã hóa Base64 thường là lựa chọn kém. Bản thân SVG đã là văn bản, nên bạn nhúng thẳng mã của nó vào data URI mà không cần qua Base64, chỉ cần thay vài ký tự dành riêng như dấu thăng và dấu nhỏ hơn bằng dạng mã hóa phần trăm. Cách này cho chuỗi ngắn hơn bản Base64 khoảng 20 tới 30 phần trăm, đồng thời còn nén tốt hơn nhiều khi máy chủ bật nén gzip, vì gzip xử lý rất hiệu quả văn bản có cấu trúc lặp trong khi chuỗi Base64 gần như ngẫu nhiên và nén được rất ít. Ngoài ra SVG nhúng dạng văn bản còn đọc được và sửa được trực tiếp trong biểu định kiểu, ví dụ đổi màu tô. Một lưu ý bảo mật: SVG có thể chứa mã kịch bản, nên đừng nhúng tệp SVG lấy từ nguồn không tin cậy vào trang của bạn, nhất là khi tệp đó do người dùng tải lên. Riêng công cụ này nhận SVG như một tệp ảnh và mã hóa Base64 bình thường, nên nếu bạn cần dạng mã hóa phần trăm thì phải xử lý bằng công cụ khác.
Những chỗ dễ sai khi giải mã chuỗi Base64 về ảnh
Lỗi hay gặp nhất là chuỗi bị cắt cụt khi sao chép, nhất là khi lấy từ một tệp nhật ký hoặc từ khung xem mã có giới hạn hiển thị. Chuỗi thiếu đuôi vẫn nhìn giống chuỗi đủ nhưng ảnh sẽ hỏng hoặc chỉ hiện được nửa trên. Lỗi thứ hai là chuỗi bị chèn ký tự xuống dòng khi đi qua thư điện tử hoặc tệp cấu hình; ở dạng này phần lớn trình giải mã vẫn chấp nhận nhưng một số nơi thì không, nên hãy nối lại thành một dòng. Lỗi thứ ba là nhầm giữa Base64 tiêu chuẩn và biến thể an toàn cho địa chỉ mạng, trong đó dấu cộng và dấu gạch chéo được thay bằng dấu trừ và gạch dưới; chuỗi lấy từ một mã thông báo web thường ở biến thể này và cần đổi ngược lại trước khi giải mã. Lỗi thứ tư là kiểu MIME không khớp: công cụ mặc định coi chuỗi thô là PNG, nên một ảnh JPEG dán vào dạng thô có thể không hiện. Cách xử lý là dán data URI đầy đủ có ghi đúng kiểu, hoặc tự thêm phần tiền tố tương ứng vào đầu chuỗi. Tệp tải về luôn mang đuôi PNG dù nội dung là định dạng khác, nên bạn có thể cần đổi lại đuôi cho đúng.
Câu hỏi thường gặp (FAQ)
Base64 làm ảnh nặng thêm bao nhiêu?
Khoảng một phần ba, vì mỗi 3 byte dữ liệu gốc được biểu diễn bằng 4 ký tự. Cộng cả phần đệm và phần tiền tố data URI, hãy tính chuỗi kết quả nặng khoảng 1,33 tới 1,37 lần tệp gốc. Ảnh 300 kilobyte sẽ cho chuỗi cỡ 400 kilobyte.
Nên nhúng ảnh Base64 khi nào?
Khi ảnh rất nhỏ, thường dưới 5 kilobyte, gần như không thay đổi và nằm ở phần hiển thị đầu tiên của trang, ví dụ biểu tượng hay hình nền lặp. Ngoài ra khi tệp phải đứng độc lập như trang HTML gửi qua tin nhắn, chữ ký thư điện tử, hoặc khi ảnh phải đi kèm dữ liệu trong một trường JSON.
Ảnh nhúng Base64 có được trình duyệt lưu đệm không?
Không được lưu đệm riêng như một tệp độc lập, nó lưu chung với tệp HTML hoặc CSS chứa nó. Nghĩa là mỗi lần bạn sửa một dòng CSS thì toàn bộ ảnh nhúng bên trong cũng phải tải lại. Đây là lý do quan trọng để không nhúng ảnh lớn hoặc ảnh hay thay đổi.
Ảnh nhúng Base64 có ảnh hưởng tới SEO không?
Ảnh nhúng trong CSS không có địa chỉ riêng nên không xuất hiện được trong kết quả tìm kiếm ảnh và không nằm trong sơ đồ ảnh. Với ảnh nội dung có giá trị tìm kiếm, hãy để tệp riêng, đặt tên tệp có nghĩa và điền thuộc tính mô tả thay thế. Base64 chỉ dành cho ảnh trang trí nhỏ.
Data URI gồm những phần nào?
Bốn phần nối liền: từ khóa data kèm dấu hai chấm, kiểu MIME như image gạch chéo png, từ khóa base64 sau dấu chấm phẩy, rồi dấu phẩy và chuỗi mã hóa. Thiếu phần tiền tố này thì trình duyệt không biết đó là ảnh gì và sẽ không hiển thị được.
Vì sao chuỗi tôi dán vào không hiện ra ảnh?
Ba nguyên nhân thường gặp: chuỗi bị cắt cụt khi sao chép nên thiếu phần đuôi, chuỗi bị chèn ký tự xuống dòng khi đi qua thư điện tử, hoặc chuỗi ở biến thể an toàn cho địa chỉ mạng có dấu trừ và gạch dưới thay cho dấu cộng và gạch chéo. Hãy nối chuỗi về một dòng và kiểm tra lại nguồn sao chép.
Chuỗi thô không có tiền tố thì công cụ hiểu là ảnh gì?
Mặc định coi là PNG. Vì vậy một ảnh JPEG dán vào ở dạng thô có thể không hiện lên. Cách xử lý là dán data URI đầy đủ có ghi đúng kiểu MIME, hoặc tự thêm phần tiền tố tương ứng vào trước chuỗi trước khi dán.
Tệp tải về có giữ đúng định dạng gốc không?
Tệp tải về luôn được đặt tên với đuôi PNG, dù nội dung bên trong có thể là JPEG hay WebP tùy chuỗi bạn dán vào. Nội dung không bị đổi, chỉ là tên tệp. Nếu định dạng thật khác PNG, bạn nên đổi lại đuôi tệp cho khớp sau khi tải về.
SVG có nên chuyển sang Base64 không?
Thường là không nên. SVG đã là văn bản nên nhúng thẳng vào data URI bằng mã hóa phần trăm cho chuỗi ngắn hơn khoảng 20 tới 30 phần trăm, đồng thời nén gzip tốt hơn nhiều so với chuỗi Base64. Công cụ này mã hóa SVG theo Base64 bình thường, cần dạng kia thì phải dùng công cụ khác.
Có giới hạn dung lượng ảnh khi chuyển đổi không?
Không có giới hạn cứng, nhưng ảnh vài megabyte sẽ tạo ra chuỗi rất dài khiến trình duyệt chậm khi hiển thị trong ô văn bản và khi sao chép. Với ảnh lớn, việc chuyển sang Base64 cũng không có lợi ích thực tế nào, tốt hơn là dùng tệp ảnh riêng.
Ảnh tôi chọn có bị tải lên máy chủ không?
Không. Công cụ dùng bộ đọc tệp sẵn có của trình duyệt để đọc ảnh ngay trong máy bạn và tạo chuỗi tại chỗ, không có lời gọi mạng nào. Bạn dùng được với ảnh nội bộ chưa công bố, ảnh giấy tờ hay ảnh sản phẩm chưa ra mắt.
Base64 có phải là mã hóa bảo mật không?
Không. Base64 chỉ là cách biểu diễn dữ liệu nhị phân bằng ký tự văn bản, ai cũng giải ngược được trong vài giây mà không cần khóa. Đừng nhầm nó với mã hóa bảo mật, và đừng dùng nó để che giấu nội dung nhạy cảm trong mã nguồn hay tệp cấu hình.
Từ khóa liên quan
- chuyển ảnh sang base64
- base64 sang ảnh online
- mã hóa ảnh base64
- giải mã base64 thành ảnh
- data uri là gì
- nhúng ảnh vào css
- background image base64 css
- base64 image encoder online
- chuyển png sang base64
- chuyển jpg sang base64
- base64 làm ảnh nặng bao nhiêu
- nhúng ảnh vào email html
- gửi ảnh qua json api
- svg data uri thay vì base64
- base64 có bảo mật không
- xem trước chuỗi base64
- tải ảnh từ chuỗi base64
- ảnh base64 và seo
- công cụ base64 miễn phí
- chuyển đổi ảnh không cần upload
