Вставлення зображень Base64


564

Чи точно з цікавості, в яких браузерах працює вбудова зображення Base64? Я маю на увазі це .

Я усвідомлюю, що зазвичай це не найкраще рішення для більшості речей, оскільки це збільшує розмір сторінки досить небагато - мені просто цікаво.

Деякі приклади:

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
чому б не налаштувати сторінку з прикладами, ми все пройдемо та зробимо тестування в реальному часі і повідомимо про це тут
Nir Levy

4
64 біт займає лише 6 символів 2 ^ 6. Текстовий рядок матиме як мінімум 8 біт на символ залежно від типу кодування. Ви втрачаєте мінімум 25% ефективності .... мій швидкий тест показав втрату на 30%.

4
Що ще важливіше, ви, ймовірно, втрачаєте здатність ефективно кешувати свої речі.
Hut8

6
@BrianHaak "надзвичайно" нічого не каже. Я особисто використовував базові образи кілька разів з ReactJs протягом останніх кількох років і взагалі не мав проблем із рендерінгом. Будь ласка, надайте деякі вимірювання.
Лукас Лейсіс

1
@ LukasLiesis Я проводив вимірювання в Google Chrome для комерційних цілей, тому публічних звітів тут немає. Для відображення унікальних зображень це може бути нормально, але ви повинні врахувати, що кешування взагалі не працює. У React.js це дуже критично, коли це призводить до повного рендерингу деталей (наприклад, щодо змін навігації).
Брайан Хаак

Відповіді:


361

Оновлення: 2017-01-10

Тепер URI даних підтримуються всіма основними браузерами. IE підтримує вбудовування зображень, починаючи з версії 8.

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


URI-дані тепер підтримуються такими веб-браузерами:

  • На базі Gecko, таких як Firefox, SeaMonkey, XeroBank, Camino, Fennec та K-Meleon
  • Konqueror, через систему введення / виведення підлеглих KDE KDE
  • Opera (включаючи такі пристрої, як Nintendo DSi або Wii)
  • На основі WebKit, таких як Safari (включаючи iOS), браузер Android, Epiphany та Midori (WebKit є похідною від KHTML-двигуна Konqueror, але Mac OS X не поділяє архітектуру KIO, тому реалізація відрізняється), а також Webkit / На основі хрому, наприклад, Chrome
  • Тризуб
    • Internet Explorer 8: Корпорація Майкрософт обмежила підтримку певним "не навігаційним" вмістом з міркувань безпеки, включаючи занепокоєння тим, що JavaScript, вбудований в URI даних, не може бути інтерпретований фільтрами сценаріїв, такими, які використовуються веб-клієнтами електронної пошти. У Версії 8 [3] URI даних повинні бути меншими за 32 Кб.
    • URI даних підтримуються лише для таких елементів та / або атрибутів [4]:
      • об'єкт (лише зображення)
      • img
      • тип вводу = зображення
      • посилання
    • CSS-декларації, які приймають URL-адресу, наприклад, фонове зображення, фон, тип списку, стиль списку тощо.
    • Internet Explorer 9: Internet Explorer 9 не має обмеження 32KiB і дозволений у більш широких елементах.
    • Веб-браузер: браузер оболонки IE, який має вбудовану підтримку схеми URI даних

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


Привіт Філіппе, чи є рішення щодо обмеження розміру 32 KiB в IE8? Чи підтримується base64 в IE7 та IE6? Якщо ні, будь-які обхідні рішення (без обмеження розміру)? Якщо так, то будь-яке обмеження розміру? Якщо так, якісь обхідні шляхи?
SexyBeast

Подивіться на це, можливо, це допоможе: phpied.com/mhtml-when-you-need-data-uris-in-ie7-and-under

Чи говорять стандарти що-небудь? Певна пропозиція щодо хорошого оновлення відповідей =).
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

5
Обмеження IE8 - Я виявив, що в IE8 максимальна кількість вбудованих зображень - 32 768 ( на Microsoft ), а вкладене зображення - трохи більше 35 000. Отже, коли background-imageвластивість CSS ( url(...embedded image) намагалася завантажити в IE8, оскільки ліміт символів був перевищений, все, classщо містило властивість, не завантажувалось. Я не переслідував цього виправлення, я повернувся до imgвбудованих зображень, які перевищували максимальну, і мої зображення завантажувались належним чином.
id.ot

53

Більшість сучасних настільних браузерів, таких як Chrome, Mozilla та Internet Explorer, підтримують зображення, закодовані як URL-адреса даних. Однак існують проблеми із відображенням URL-адрес даних у деяких мобільних браузерах: Android-браузер Stock and Browph Delphin не відображатиме вбудовані JPEG .

Я рекомендую вам використовувати такі інструменти для кодування / декодування в режимі он-лайн:

Установіть прапорець "Форматувати як URL-адресу даних", щоб відформатувати його як URL-адресу даних.


3
Вам не потрібен онлайн-інструмент для кодування до base64. Натомість ви можете використовувати інструмент командного рядка base64 на Linux або Mac OS X: echo "data: image / jpeg; base64," $ (cat file.jpg | base64)
cstroe

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.