我有以下问题:
我在一个新的继承项目中从事维护工作。在这个项目中,开发人员以这种方式处理图像和视频的元数据:
function getRotationFromFile($realPath) {
$retVal = Array();
$cmd = variable_get("exiftool",null) . "\"$realPath\"" . " | grep -E 'Rotation|Camera Identifier'";
exec($cmd, $output);
foreach ($output as $row){
$key = trim(strstr($row, ':', true));
$value = trim(str_replace(": ", "", strstr($row, ': ')));
$retVal[$key] = $value;
}
return $retVal;
}
正如您所读,此函数调用 exec(exiftool ..)并检索一些元数据。 我知道在php存在exif_read_data,它也是如此。
我的问题是:
提前谢谢!
答案 0 :(得分:3)
我创建了一个PHP脚本,允许非常快速地通过exiftool进行读/写。 我们将它与gearman一起使用,因此它作为后台服务运行,exiftool中最慢的部分是启动它,然后通过将作业传递给gearman从PHP脚本中调用它。 我们运行这个脚本的大约5个实例,因此它可以快速服务。 一个进程应该能够在大约1-2s内处理大约100个文件,这个程序取决于文件大小和存储速度,但它确实可以很好地扩展。 这已在我们的数字资产管理平台上用于生产过去5个月。
答案 1 :(得分:1)
据我所知,exif_read_data只会读取EXIF数据,而不会读取任何其他类型的元数据,以及仅限于Tiff和Jpg文件。 EXIF块只在视频文件中很少出现。此外,您在代码位Camera Identifier
和Rotation
中寻找的两个标记不是EXIF规范的一部分。 Camera Identifier
似乎是Quicktime代码,而Rotation
似乎是尼康和佳能的makernotes代码。
可以做的一件事就是告诉Exiftool只显示你想要的标签,而不是通过grep管道。这可以通过在命令行中添加-CameraIdentifier -Rotation
来完成。安静选项-q
也可能对此有用。
您可能还想查看Orientation
标记,因为这是保存图像文件方向的标准标记。
@tsmgeek可能有最好的解决方案,因为它们对启动开销是正确的。
答案 2 :(得分:0)
PHP函数exif_read_data
仅支持JPEG和TIFF文件类型。命令行实用程序exiftool
- 更多。