Обновить

Комментарии 42

Кстати, именно с помощью этой утилиты, я сконвертировал картинки на своем сайте 6410.ru/omsk
Ссылка на сайт дана, ради того чтобы можно было воочию увидеть, сколько картинок было сконвертировано.
Потому как в личке спрашивали где было применение этой утилите.
прям вот так спрашивали, что первым же комментом оказался ваш со ссылкой? :)

кстати, получится реальный выигрыш в сравнении с вариантом со спрайтами?
Первым письмом, полученным мною на Хабре, был вопрос целесообразности данной утилиты и месте применения.
Поэтому, для предотвращения подобного вопроса, сразу же был дан такой ответ.
А по поводу спрайтов, это конечно хорошо, но иконки для сайтов постоянно меняются, а следовательно мне пришлось бы постоянно менять картинку (что согласитесь не так просто когда их много), а так же менять CSS 100500 background-position:
ну, дело удобства и привычки. я бы спрайтами делал — поэтому и спросил про объективный выигрыш (не связанный со временем добавления изменений, но со скоростью загрузки/количеством запросов к серверу).
а может есть ссылка на алгоритм? можно было бы под .NET написать
Алгоритм простейший, пример на php:
<?php
$in  = 'i.gif';
$out = 'i.html';
$fin  = file_get_contents($in); // Получаем файл $in
$fout = base64_encode($fin); // Кодируем в base64
$html = '<img src="data:image/gif;base64,'.$fout.'">'; // Генерирует картинку для сохранения в html
file_put_contents($out, $html); // Сохраняем страницу
?>

т.е. всё что надо — это алгоритм кодирования байтов в base64.
Для полноты — описание и пример алгоритма кодирования и декодирования base64 на C++: www.kbcafe.com/articles/HowTo.Base64.pdf (английский язык).
Меня опередили +1
Давно собирался прикрутить себе в assets manager такое (парсим css на наличие background изображений, выкачиваем, кодируем и заменяем + попутно перед этим можно проверять размер файла изображения), но все руки никак не доходят. Сегодня займусь.
Я такой скриптец написал, лениво было править названия файлов, а так закидываешь через форму, потом вставляешь в CSS.
<form method="post" enctype="multipart/form-data"><input type=file name=file><input type=submit></form>
<?php
if(isset($_FILES['file'])){
	echo "<textarea style='width:100%;height:400px;'>url(data:{$_FILES['file']['type']};base64,
	" . base64_encode(file_get_contents($_FILES['file']['tmp_name'])) . ')</textarea>';
}
Вот за это спасибо!
Все таки моментальная конвертация на своем локальном сервере лучше, чем сервисы.

Вот оно готовое решение, а как кинешься искать нужный сервис в интернете, так что-то да не подходит.

Не проще в консоли все файлы в папке жахнуть и потом скопировать в css? Как-нибудь так:
$ find . -name "*.png" -exec echo {} " -> " \; -exec base64 {} \;
Или дев-сервер на винде?
Ну если такое катит на Linux, то не проблема воткнуть в Virtual Box последнюю Ubuntu, и там сконвертить.
Код сработает?!
Алгоритма не знаю. Все, что я сделал, это удобная форма работы вот этой утилиты (написанной на Java).
Может скажете почему я должен знать алгоритм?!
Мне нужен инструмент и он у меня есть.
Ради такого яву тащить… ох.
Если близко воробей, мы готовим пушку…
Понятное дело что пушка, но на тот момент когда мне это нужно было, была только пушка.
Онлайн сервисы не в счет.
Ну и еще мало информации по этой теме.
На shell script сделать проще и быстрее.

#!/bin/sh
WIDTH=`sips -g pixelWidth $1 | tail -n1 | cut -d" " -f4`
HEIGHT=`sips -g pixelHeight $1 | tail -n1 | cut -d" " -f4`
echo ".favicon_png:{ background:url(data:image/png;base64,`base64 $1`) top left no-repeat;); height: ${HEIGHT}px; width: ${WIDTH}px; }" > $2

И вызывать как createfi.sh myimage.png mystyle.css
Исправленная версия:
#!/bin/sh
WIDTH=`sips -g pixelWidth $1 | tail -n1 | cut -d" " -f4`
HEIGHT=`sips -g pixelHeight $1 | tail -n1 | cut -d" " -f4`
BASE64=`base64 $1`
echo ".favicon_png:{ background:url(data:image/png;base64,${BASE64}) top left no-repeat;); height: ${HEIGHT}px; width: ${WIDTH}px; }" > $2
Хм… А не подскажете чем дернуть content type что-б не только png?
НЛО прилетело и опубликовало эту надпись здесь
format=`file -i workvote.jpg | awk '{print $2}'`
вернет сразу image/jpeg; — с точкой с запятой
Спасибо. Ну а рекурсивный обход каталога я уже сам соображу.
В data url одна проблема — длинна url не может быть больше 2 килобайт. Так что далеко не все картинки таким образом можно передавать.
С чего Вы взяли? Даже в IE8 (более древние версии не поддерживают) — 32 КБ, а в IE9 можно до 4ГБ туда запхать.
alxbuk.tumblr.com/temp вот показатель открывается в любом браузере, кроме IE.
Картинка там весом в 35КБ.
Так что, как мне кажется только IE впереди планеты всей, и только для него такое ограничение
Нормально все в ИЕ открывается.
Может быть в 9?!
А в 8 не открывается.
В IE8 ограничение 32 КБ, писал выше.
Забавно) Открывается нормально, но свойства весьма странные.
В своё время баловался и «перекодированием» картинок в таблицы с каждой ячейкой соответствующего цвета. Открывалось долго, весило много. Зато видишь картинку, но внутри чистый html ))
Ещё можно капчи цифровые делать на табличках, со случайными стилями каждой ячейки. В браузере нормально нарисуется и без графики, а ботов подкручивать надо на это.
Вывод старый как мир — делать make для обработки своих css, и прогонять его, когда нужно, по файлам проекта. И уже он пусть разбирается (по нами указанным правилам, конечно), что и куда включать и как кодировать.

Руками по одной картинки переводить в css-запись — не совсем чтобы полезная трата времени. «Машина должна работать, а человек — думать».
Вот подготовил еще одну статью, а куда писать в какой хаб?!
Молодым везде у нас дорога!
Один хороший человек попросил тут выложить решение для винды:

Data URI Generator

Встраивается в проводник.
Кстати, ничто не мешает сделать GUI-решение для мака на базе моего же скрипта (см. выше), обёрнутого в Automator. Для Linux'а так же можно прикрутить этот скрипт к контекстному меню.
Интересная вариация, только что попробовал, сработало.
1. Но не всегда необходимо вставлять data URI в CSS, иногда нужно просто вывести в *.php
2. В принцип, не всегда нужно вставлять картинки в CSS.
А программа эта делает именно так.
Хотя не спорю инструмент полезный.

Подсказка: Программа встраивает свой пункт меню, при нажатии ПКМ на css файле.
А никто не подскажет, за что автора топика в ридонли перевели?
Ещё способ. Перетаскиваем изображение в редактор векторной графики Inkscape, на вопрос внедрить или привязать изображение выбираем «внедрить». Потом вызываем редактор DOM (Ctrl+Shift+X) и копируем значение атрибута SRC.
НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации