使用PHP将ICO转换为PNG的问题

时间:2011-03-21 02:45:23

标签: php png favicon ico

上下文:Favicons

我正在编写一个WordPress插件来下载favicon并将它们转换为png:

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

Icon Lib

问题

在5.000个图标中的1个(其他图标正常工作......)XOR功能出现问题。请参阅此处的第296行: http://plugins.trac.wordpress.org/browser/wp-favicons/trunk/plugins/filters/inc/class.ico.php(注意:未初始化的字符串偏移量:64)因此预期的字符串太小。

实施例

一个例子就是这个图标:click here to see(导航到slatch.com)

问题

有人知道如何解决这个问题吗?或者知道另一个好的PHP图标类让我通过get_as_string而不是get_from_file读取.ico(各种各样的)哪个更好?

PS

我已经读过:

4 个答案:

答案 0 :(得分:2)

您发布的示例图标是单色(1 BPP)。可能该库不支持如此低的颜色深度。

答案 1 :(得分:2)

我已经编写了一个完全经过单元测试的软件包,用于阅读支持1bpp图像的.ico文件(以及嵌入式PNG) - 它可以在这里找到https://github.com/lordelph/icofileloader

问题中。问题.ico的链接已经死了,但如果有人遇到类似的问题,我很乐意修复该软件包。

答案 2 :(得分:1)

@edelwater

我可能会弄错,但不是新一代的ICO文件真的PNG有不同的扩展名吗?这就是我过去创造它们的方式。我能理解将jpeg等其他格式转换为png然后更改扩展名。

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

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

这不是一个答案,而是一个参考。

答案 3 :(得分:0)

该类支持1 bpp(单色)ico文件。然而,它有一个错误。它无法将每个图像行的填充考虑到4字节(32位)边界,因此不能正确解码宽度小于32像素的图标。

我将修复此问题供我自己使用,但我不知道该如何处理它。在这里发贴补丁?