在php中获取jpg图像的iptc元数据

时间:2012-11-26 21:14:59

标签: php metadata iptc

我正在尝试使用php从jpg图像(http://pepeliana.com/images/DSC4008.jpg)获取一些iptc元数据。引用图像的标题元数据设置为“测试”。我已经浏览了php手册和两个似乎都能完成这项工作的功能 - iptcparse()和exif_read_data()。这两个函数都在php中启用。但是对于我的生活,我无法弄清楚,为什么这两个函数都没有返回所需的数据。这是我尝试过的示例代码,我还应该提一下,我还在几个具有Title iptc元数据的图像上尝试了这个代码(因此排除了图像损坏或不正确设置元数据的可能性):

<?php 
$size = getimagesize ('DSC4008.jpg', $info);       
 if(is_array($info)) {   
    $iptc = iptcparse($info["APP13"]);
    foreach (array_keys($iptc) as $s) {             
        $c = count ($iptc[$s]);
        for ($i=0; $i <$c; $i++)
        {
            echo $s.' = '.$iptc[$s][$i].'<br>';
        }
    }                 
}
 ?>

也:

<?php
$exif = exif_read_data('DSC4008.jpg', 0, true);
echo $exif['WINXP']['Title'];
?>

正如你所看到的,这很简单,但是,我无法返回我想要的东西。显然,我必须遗漏一些明显简单的东西,不是吗?请帮忙!

3 个答案:

答案 0 :(得分:1)

您已将图像的ImageDescription设置为“测试”
这将是有效的:

$exif = exif_read_data('1.jpg','IFD0',true);
echo $exif["IFD0"]["ImageDescription"];

回波

Testing

答案 1 :(得分:0)

尝试一下:

$size = getimagesize( 'DSC4008.jpg', $iptch );

$iptc = isset( $iptch['APP13'] ) ? iptcparse( $iptch['APP13'] ) : false;
$name = isset( $iptc['2#005'] ) ? $iptc['2#005'][0] : 'Undefined';

答案 2 :(得分:0)

我遇到了类似的问题,并为此创建了自己的library

首先-您需要使用Composer

安装它
composer require ibudasov/php7-iptc-manager

然后

// import the Manager class
use iBudasov\Iptc\Manager;

// ... and instantiate it!
$manager = Manager::create();

$manager->loadFile('./DSC4008.jpg');

$title = $manager->getTag(Tag::OBJECT_NAME);