Nhúng hình ảnh Base64


564

Hoàn toàn không tò mò, trình duyệt nhúng Base64 hoạt động trong trình duyệt nào? Những gì tôi đang đề cập đến là đây .

Tôi nhận ra rằng nó thường không phải là một giải pháp tốt cho hầu hết mọi thứ, vì nó làm tăng kích thước trang khá nhiều - tôi chỉ tò mò.

Vài ví dụ:

HTML:

<img alt="Embedded Image" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIA..." />

CSS:

div.image {
  width:100px;
  height:100px;
  background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIA...);
}

3
tại sao không thiết lập một trang với các ví dụ, tất cả chúng ta sẽ trải qua và thực hiện thử nghiệm thực tế và báo cáo nó ở đây
Nir Levy

4
64 bit chỉ mất 6 ký tự 2 ^ 6. Một chuỗi văn bản sẽ có tối thiểu 8 bit cho mỗi ký tự tùy thuộc vào loại mã hóa. Bạn mất ít nhất 25% hiệu quả .... bài kiểm tra nhanh của tôi cho thấy mất khoảng 30%.

4
Quan trọng hơn là bạn có thể mất khả năng lưu trữ hiệu quả bộ nhớ cache của bạn.
Hut8

6
@BrianHaak "vô cùng" không nói gì. Cá nhân tôi đã sử dụng hình ảnh base64 nhiều lần với ReactJs trong vài năm qua và không có vấn đề kết xuất nào cả. Vui lòng cung cấp một số phép đo.
Lukas Liesis

1
@LukasLiesis Tôi đã thực hiện các phép đo trong Google Chrome cho mục đích thương mại, vì vậy không có báo cáo công khai nào ở đây. Có thể ổn khi hiển thị hình ảnh độc đáo nhưng bạn phải xem xét rằng bộ nhớ đệm hoàn toàn không hoạt động. Trong React.js, nó rất quan trọng khi dẫn đến hoàn thành các phần kết xuất lại (ví dụ về thay đổi điều hướng).
Brian Haak

Câu trả lời:


361

Cập nhật: 2017-01-10

URI dữ liệu hiện được hỗ trợ bởi tất cả các trình duyệt chính. IE cũng hỗ trợ nhúng hình ảnh kể từ phiên bản 8.

http://caniuse.com/#feat=datauri


Các URI dữ liệu hiện được các trình duyệt web sau hỗ trợ:

  • Dựa trên tắc kè, như Firefox, SeaMonkey, XeroBank, Camino, Fennec và K-Meleon
  • Konqueror, thông qua hệ thống đầu vào / đầu ra nô lệ KIO của KDE
  • Opera (bao gồm các thiết bị như Nintendo DSi hoặc Wii)
  • Dựa trên WebKit, chẳng hạn như Safari (bao gồm cả trên iOS), trình duyệt của Android, Epiphany và Midori (WebKit là một công cụ phái sinh của công cụ KHTML của Konqueror, nhưng Mac OS X không chia sẻ kiến ​​trúc KIO nên các triển khai khác nhau), cũng như Webkit / Dựa trên Chromium, chẳng hạn như Chrome
  • Cây đinh ba
    • Internet Explorer 8: Microsoft đã giới hạn sự hỗ trợ của mình đối với một số nội dung "không thể điều hướng" nhất định vì lý do bảo mật, bao gồm các lo ngại rằng JavaScript được nhúng trong URI dữ liệu có thể không thể hiểu được bởi các bộ lọc tập lệnh như các ứng dụng email được sử dụng trên web. URI dữ liệu phải nhỏ hơn 32 KiB trong Phiên bản 8 [3].
    • URI dữ liệu chỉ được hỗ trợ cho các thành phần và / hoặc thuộc tính sau [4]:
      • đối tượng (chỉ hình ảnh)
      • img
      • kiểu nhập = hình ảnh
      • liên kết
    • Các khai báo CSS chấp nhận một URL, chẳng hạn như hình nền, hình nền, kiểu kiểu danh sách, kiểu danh sách và tương tự.
    • Internet Explorer 9: Internet Explorer 9 không có giới hạn 32KiB và được phép trong các phần tử rộng hơn.
    • Trình duyệt Thế giới: Trình duyệt shell IE có hỗ trợ tích hợp cho lược đồ URI dữ liệu

http://en.wikipedia.org/wiki/Data_URI_scheme#Web_browser_support


Xin chào Philippe, có cách giải quyết nào cho giới hạn kích thước 32 KiB trong IE8 không? Base64 có được hỗ trợ trong IE7 và IE6 không? Nếu không, bất kỳ cách giải quyết nào (không có giới hạn kích thước)? Nếu có, giới hạn kích thước nào? Nếu có, cách giải quyết nào?
SexyBeast

Nhìn vào này, có lẽ nó sẽ giúp: phpied.com/mhtml-when-you-need-data-uris-in-ie7-and-under

Các tiêu chuẩn có nói gì không? Upvote nhất định để cập nhật câu trả lời tốt =).
Ciro Santilli 郝海东 冠状 病 事件

5
Giới hạn IE8 - Điều tôi tìm thấy là IE8 có giới hạn ký tự tối đa của hình ảnh nhúng là 32.768 ( theo Microsoft ) và hình ảnh nhúng của tôi chỉ có hơn 35.000. Vì vậy, khi thuộc tính background-imageCSS ( url(...embedded image) cố tải trong IE8, vì giới hạn ký tự đã bị vượt quá, toàn bộ thuộc classtính chứa thuộc tính không được tải. Tôi đã không thuyết phục được bản sửa lỗi này, tôi đã hoàn nguyên về imgcác hình ảnh nhúng vượt quá mức tối đa và hình ảnh của tôi được tải một cách thích hợp.
id.ot

53

Hầu hết các trình duyệt máy tính để bàn hiện đại như Chrome, Mozilla và Internet Explorer đều hỗ trợ hình ảnh được mã hóa dưới dạng URL dữ liệu. Nhưng có một số vấn đề khi hiển thị URL dữ liệu trong một số trình duyệt di động: Trình duyệt Android Stock và Trình duyệt cá heo sẽ không hiển thị JPEG được nhúng .

Tôi khuyên bạn nên sử dụng các công cụ sau để mã hóa / giải mã cơ sở trực tuyến64:

Kiểm tra tùy chọn "Định dạng URL dữ liệu" để định dạng dưới dạng URL dữ liệu.


3
Bạn không cần một công cụ trực tuyến để mã hóa thành base64. Thay vào đó, bạn có thể sử dụng công cụ dòng lệnh base64 trên Linux hoặc Mac OS X: echo "data: image / jpeg; base64," $ (cat file.jpg | base64)
cstroe

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.