【问题标题】:Getting metadata for a png format image using php [duplicate]使用php获取png格式图像的元数据[重复]
【发布时间】:2013-06-04 08:52:08
【问题描述】:

我可以使用 exif 标签来获取 jpeg 或 tiff 格式图像的元数据。但是我应该怎么做才能获取 png 元数据呢?

示例:我获取 exif 标签的代码:

 <?php
    $image = "NATU.png";
    $exif = exif_read_data($image, 0, true);
    foreach ($exif as $key => $section) {
    foreach ($section as $name => $val) {
    echo "$key.$name: $val <br>";
    } 
    } 
    ?>

【问题讨论】:

  • 这个库 PNGMetada 从 png 中提取元数据(Exif、XMP、GPS...),我希望这会有所帮助:)

标签: php png metadata exif


【解决方案1】:

PNG 文件格式定义了一个 PNG 文档被分割成多个数据块。因此,您必须导航到您想要的块。

假设你有一个格式良好的 PNG:

<?php
  $fp = fopen('18201010338AM16390621000846.png', 'rb');
  $sig = fread($fp, 8);
  if ($sig != "\x89PNG\x0d\x0a\x1a\x0a")
  {
    print "Not a PNG image";
    fclose($fp);
    die();
  }

  while (!feof($fp))
  {
    $data = unpack('Nlength/a4type', fread($fp, 8));
    if ($data['type'] == 'IEND') break;

    if ($data['type'] == 'tEXt')
    {
       list($key, $val) = explode("\0", fread($fp, $data['length']));
       echo "<h1>$key</h1>";
       echo nl2br($val);

       fseek($fp, 4, SEEK_CUR);
    }
    else
    {
       fseek($fp, $data['length'] + 4, SEEK_CUR);
    }
  }


  fclose($fp);
?>

【讨论】:

  • 请注意,这只会给出“tEXt”块中的文本,PNG 中还有其他两种文本块类型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-30
  • 2011-10-18
  • 2019-11-12
  • 1970-01-01
  • 2013-01-09
  • 1970-01-01
相关资源
最近更新 更多