在PHP中读取PNG元数据的最快方法

时间:2010-11-04 02:23:53

标签: php parsing png metadata imagemagick

我想从PNG文件中提取两个字段。即,几何字段和元数据中的一个字段。

我能做到这一点的最快方法是什么?我已经对我目前执行此操作的脚本进行了基准测试,到目前为止,最慢的操作是在PNG文件上执行实际的ImageMagick“识别”程序。 (.4秒vs .0001秒解析几何的输出数组,8.39E-5秒解析元数据中的关键短语)

提前感谢您的帮助,

乔纳森

1 个答案:

答案 0 :(得分:1)

我不熟悉任何现成的库或类,在没有子进程调用的情况下在PHP中执行它,但如果找不到,那么编写自己的库肯定是要走的路。

PNG是一种相当简单的块流格式,因此寻找特定的块并提取一些头字段是微不足道的。

您需要的只是读取和检查8字节89 50 4E 47 0D 0A 1A 0A PNG标头,然后在读取8个字节(块长度加类型)和使用长度搜索超过块之间交替,直到您点击你想要的块类型。

对于几何体,假设PNG遵循规范,这里是它的方式:

  1. 读取并验证PNG标头(8个字节)
  2. 读取并检查第一个块的标头(8个字节)
    1. 成功。 type = IHDR
    2. 为几何(宽度,高度,每个4字节)读取额外的8个字节
  3. 如果您想要的其他字段不在IHDR中,请使用步骤2中的块大小搜索下一个块以搜索您想要的其他字段。
  4. 我可能需要5到15分钟才能在Python中鞭打这样的东西。 (我用RAR和GIF做过类似的事情)因为我在使用低级文件I / O的经验较少,所以在PHP中可能有15到25个。