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

上下文:网站图标

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

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

图标库

问题

在 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

我已经读过了:

【问题讨论】:

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

标签: php png favicon ico


【解决方案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),然后可能从这里链接到。
      • 嗨伊恩,太好了,从来没有来过,如果你在某处发布更新的库,我将替换我应用程序中的库
      猜你喜欢
      • 1970-01-01
      • 2012-01-25
      • 2011-06-05
      • 2013-06-24
      • 2011-05-11
      • 2018-06-26
      • 2011-03-12
      • 2021-10-30
      • 2015-11-06
      相关资源
      最近更新 更多