使用PHP将ICO转换为PNG的问题 背景:Favicons

使用PHP将ICO转换为PNG的问题 背景:Favicons,php,png,favicon,ico,Php,Png,Favicon,Ico,我正在编写一个WordPress插件来下载favicons并将其转换为png: (GPL2) 图标库 我需要有一个ICO到PNG的转换库,它不从磁盘读取文件,而是从字符串读取文件 我还需要广泛的用户支持,所以不是一个带有参数的已编译php,而不是大多数普通WordPress用户所拥有的参数 我目前正在使用这个: 问题 在5000个图标中的1个(其他图标正常工作…)中,XOR功能出现问题。请参见此处的第296行:(注意:未初始化的字符串偏移量:64),因此预期的字符串太小 例子 例如,此图标:

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

(GPL2)

图标库
  • 我需要有一个ICO到PNG的转换库,它不从磁盘读取文件,而是从字符串读取文件
  • 我还需要广泛的用户支持,所以不是一个带有参数的已编译php,而不是大多数普通WordPress用户所拥有的参数
  • 我目前正在使用这个:
问题 在5000个图标中的1个(其他图标正常工作…)中,XOR功能出现问题。请参见此处的第296行:(注意:未初始化的字符串偏移量:64),因此预期的字符串太小

例子 例如,此图标:(导航到slatch.com)

问题: 有人知道怎么解决这个问题吗?或者知道另一个好的PHP图标类,它让我可以通过get_as_字符串而不是get_from_文件来读取.ico(各种各样的),哪一个更好

附言 我已经读过:

  • (工具)
  • 雪绒水

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


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

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

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


    我打算把它修好供自己使用,但我不知道该怎么办。在这里发布补丁?

    我已经编写了一个完整的单元测试包,用于读取支持1bpp图像(以及嵌入式PNG)的.ico文件,可以在这里找到


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

    我已更新了您的问题标题和标签,希望能吸引更多关注。你能发布更多的例子吗?使用GD库的解决方案可以接受吗?当XOR操作失败时,这意味着它已经是一个PNG文件了。就这样保存吧。文件本身是否有损坏的可能?我尝试了多种工具,但都无法打开文件。浏览器显示它虽然。。。但可能是因为它只是优雅地处理了腐败或其他问题……ICO并不总是PNG格式。大多数浏览器支持使用favicon使用的多种图像格式类型(扩展名为.ico),但ico是自己的图像格式。这增加了op问题的模糊性,因为他正在下载的图标可能有多种格式。是的。。。这里有很多不同的图标,不仅仅是嵌入PNG的新一代。你必须阅读文件的头部,看看它是否是一个图标,PNG,或者gif。(我不认为任何人会使用jpg作为ico。)我真的确定它不受支持。你最好将补丁提交给插件作者(可能通过他们在OP中链接的Trac),然后从这里链接到插件作者。嗨,伊恩,太好了,从来没有想到过,如果你在某个地方发布更新的库,我会在我的应用程序中替换库