使用exiftool将图片中的元数据提取到json对象中

时间:2017-12-18 16:56:51

标签: php arrays json

我正在开发一个网站,我需要使用exiftool提取图像的元数据(jpeg)。我正在使用这段代码:

$cmd = exec("exiftool ".$this->url, $result);

$result现在是一个经典阵列:

array (size=113)
0 => string 'ExifTool Version Number         : 10.40' (length=39)
1 => string 'File Name                       : photo7.jpg' (length=44)
2 => string 'Directory                       : images' (length=40)
3 => string 'File Size                       : 139 kB' (length=40)
4 => string 'File Modification Date/Time     : 2017:11:26 16:27:05+01:00' (length=59)
5 => string 'File Access Date/Time           : 2017:12:17 23:07:18+01:00' (length=59)
6 => string 'File Inode Change Date/Time     : 2017:11:26 16:27:05+01:00' (length=59)
7 => string 'File Permissions                : rw-r--r--' (length=43)
8 => string 'File Type                       : JPEG' (length=38)
9 => string 'File Type Extension             : jpg' (length=37)
...

但是我想把这个数组变成另一个带有意义键而不​​是数字的数组。更好的是拥有一个json对象。在任何情况下,我希望最终的数组看起来像这样:

    array (size=113)
'ExifTool Version Number' => string '10.40' (length=5)
'File Name' => string 'photo7.jpg' (length=10)
...

有没有一种简单的方法可以达到这个目的?

2 个答案:

答案 0 :(得分:0)

只需将字符串拆分为冒号......

$result2 = array();
foreach($result as $value){
    $tmp = preg_split("#\s*\:\s*#", $value);
    $result2[$tmp[0]] = $tmp[1];
}
$result = result2;

答案 1 :(得分:0)

一种更简单的方法是使用-json exiftool选项。返回图像及其属性的JSON列表:

[{
  "SourceFile": "img/mural.jpeg",
  "ExifToolVersion": 10.60,
  …

因此,您只需json_decode ( implode ( $result ))