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

Posted

技术标签:

【中文标题】使用 PHP 将 ICO 转换为 PNG 的问题【英文标题】:Issue converting ICO to PNG using PHP 【发布时间】:2011-07-19 09:39:46 【问题描述】:

上下文:网站图标

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

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

图标库

我需要一个不从磁盘读取文件而是从字符串读取文件的 ICO 到 PNG 转换库。 我还需要对用户的广泛支持,所以不是一个带有大多数普通 WordPress 用户所没有的参数的编译 php 我目前正在使用这个:http://www.phpclasses.org/package/2369-PHP-Extract-graphics-from-ico-files-into-PNG-images.html

问题

在 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

我已经读过了:

How to convert .ICO to .PNG?(工具) Convert png file to ico with PHP Favicon to PNG in PHP

【问题讨论】:

我已经更新了你的问题标题和标签,希望能引起更多关注。您可以发布更多示例网站图标吗? 是否可以接受使用 GD 库的解决方案? 当 XOR 操作失败时,这意味着它已经是一个 PNG 文件。就这样保存吧。 文件本身是否有可能损坏?我尝试了多种工具,但没有一个能够打开该文件。浏览器虽然显示它......但可能是因为它只是优雅地处理损坏,或者什么...... 【参考方案1】:

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

【讨论】:

【参考方案2】:

我已经编写了一个完整的单元测试包,用于读取支持 1bpp 图像(以及嵌入式 PNG)的 .ico 文件 - 可在此处获得 https://github.com/lordelph/icofileloader

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

【讨论】:

【参考方案3】:

@edelwater

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

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

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

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

【讨论】:

ICO 并不总是 PNG 格式。大多数浏览器都支持为一个网站图标使用多种图像格式类型(带有 .ico 扩展名),但 ICO 是它自己的图像格式。这给操作的问题增加了歧义,因为他正在下载的图标可能有多种格式。 是的...那里有许多不同的图标,不仅是嵌入了 PNG 的新一代。 你必须读取文件的头部,看看它是不是 ico、png 或 gif。 (我认为没有人会使用 jpg 作为 ico。)而且我很确定它不受支持。【参考方案4】:

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

我将解决这个问题以供我自己使用,但我不确定如何处理它。在这里发布补丁?

【讨论】:

你最好将补丁提交给插件作者(可能通过他们在 OP 中链接的 Trac),然后可能从这里链接到。 嗨伊恩,太好了,从来没有来过,如果你在某处发布更新的库,我将替换我应用程序中的库

以上是关于使用 PHP 将 ICO 转换为 PNG 的问题的主要内容,如果未能解决你的问题,请参考以下文章

C#自制png转ico图标工具

如何使用 Python 将 .ICO 转换为 .PNG?

iConvert Icons能够在Mac上快速进行图标转换

png在线转换icns

js字符串拆分?

js字符串拆分?