Проблема преобразования ICO в PNG с использованием PHP - PullRequest
6 голосов
/ 21 марта 2011

Контекст: фавиконы

Я пишу плагин WordPress для загрузки фавиконов, а также конвертирую их в png:

http://plugins.trac.wordpress.org/browser/wp-favicons/trunk (GPL2)

Icon Lib

  • Мне нужно было иметь библиотеку преобразования ICO в PNG, которая читает файлы не с диска, а со строк.
  • Мне также нужна широкая поддержка пользователей, поэтому я нескомпилированный php с параметром, который не большинство обычных пользователей WordPress имеют
  • Я в настоящее время использую этот: http://www.phpclasses.org/package/2369-PHP-Extract-graphics-from-ico-files-into-PNG-images.html

Проблема

В 1 из5.000 значков (остальные работают нормально ...) возникает проблема с функциональностью XOR.См. Строку 296 здесь: http://plugins.trac.wordpress.org/browser/wp-favicons/trunk/plugins/filters/inc/class.ico.php (Примечание: смещение неинициализированной строки: 64) Таким образом, ожидаемая строка слишком мала.

Пример

Примером этого значка является: нажмите здесь, чтобы увидеть (переходит на slatch.com)

Вопрос

Кто-нибудь знает, как это исправить?ИЛИ знает еще один хороший PHP Icon Class, который позволяет мне читать .ico (все виды) через get_as_string вместо get_from_file, что лучше?

PS

Я уже прочитал:

Ответы [ 4 ]

2 голосов
/ 22 января 2017

Я написал полностью протестированный модуль для чтения .ico-файлов, который поддерживает изображения 1bpp (а также встроенные PNG) - он доступен здесь https://github.com/lordelph/icofileloader

Ссылка на проблему .ico в вопросе устарела, но я рад исправить пакет, если кто-нибудь сталкивается с подобной проблемой.

2 голосов
/ 31 марта 2011

Значок примера, который вы разместили, является монохромным (1 BPP).Возможно, библиотека не поддерживает такую ​​низкую глубину цвета.

1 голос
/ 23 марта 2011

@ edelwater

Я могу ошибаться, но разве новое поколение файлов ICO не действительно PNG с другим расширением? Вот как я создал их в прошлом. Я мог бы понять преобразование других форматов, таких как JPEG в PNG, а затем изменить расширение.

http://en.wikipedia.org/wiki/Favicon#Standardization

http://en.wikipedia.org/wiki/ICO_(file_format)#PNG_format

Это не ответ, а ссылка.

0 голосов
/ 16 июля 2012

Класс поддерживает 1 bpp (монохромный) ICO-файлы. Однако есть ошибка с этим. В нем не учитывается заполнение каждой строки изображения до 4-байтовой (32-битной) границы, поэтому значки, ширина которых меньше 32 пикселей, неправильно декодируются.

Я собираюсь исправить это для своего собственного использования, но я не уверен, что с этим делать. Опубликовать патч здесь?

...