Хранение и загрузка данных в png
Aug. 26th, 2010 04:43 amИсточник: http://blog.nihilogic.dk/2008/05/compression-using-canvas-and-png.html
Решил повторить технику, посмотреть, насколько это сложно в реализации. Изначально предполагалось, что это может быть способ для кроссдоменного обмена данными, но авторы спецификации оказались умнее меня и все это предусмотрели. Далее интересен вопрос сжатия – у меня получилось, что в любом случае размер получающейся картинки был больше, чем сжатого gzip-ом файла, но тем не менее значительно меньше, чем размер непакованного файла. Если загонять в картинку архив, то на выходе получаем файл большего размера, чем архив.
Например:
163855 jquery.js
45997 jquery.js.gz
63490 jquery.png
46326 jquery.gz.png
Таким образом, это может быть полезно, если нет возможности управлять сжатием скриптов на сервере и при жестких ограничениях (как здесь). Еще так можно хранить пользовательские данные, если нет желания/возможности делать регистрацию – попутно с действиями пользователя генерим картинку, которую он может сохранить и, загрузив, продолжить с того места, где закончил, благо загрузка файлов через File API к ошибкам безопасности не приводит.
Смотреть:
Компрессор на питоне: http://gist.github.com/550578
Декодер на js: http://test.dpetroff.ru/png_loader/ (проверяем наличие jQuery объектов в DOM)
Декодер на js с загрузкой через File API: http://test.dpetroff.ru/png_loader/index2.html (картинку можно взять из предыдущего примера)
P.S. если вы взяли изображения из соседних по теме постов и ничего не получилось, то все дело в разных форматах паковки данных в изображение.
Оригинал: http://blog.dpetroff.ru/tech/store_data_in_png