can3p (can3p) wrote,
can3p
can3p

Хранение и загрузка данных в png

Источник: 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
Tags: canvas, file api, getimagedata, javascript, png
Subscribe
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments