在PHP或Unix命令行中确定图像分辨率和文件类型的最快方法?

Gil*_*les 5 php png jpeg image imagemagick

我目前正在使用ImageMagick来确定上传到网站的图片大小.通过在命令行上调用ImageMagick的"识别",它需要大约0.42秒来确定1MB JPEG的尺寸以及它是JPEG的事实.我发现有点慢.

使用Imagick PHP库甚至更慢,因为它在对图像进行任何处理之前尝试加载整个1MB的内存(在这种情况下,只需确定其大小和类型).

是否有任何解决方案可以加快确定哪个文件类型以及任意图像文件具有哪些尺寸的过程?我可以忍受它只支持JPEG和PNG.对我来说重要的是文件类型是通过查看文件的标题来确定的,而不仅仅是扩展名.

编辑:解决方案可以是PHP调用的命令行工具UNIX,就像我现在使用ImageMagick的方式一样

J D*_*nal 7

如果您使用PHP支持GD,可以尝试getimagesize().


Ste*_*ble 3

抱歉,我无法将此作为评论添加到之前的答案中,但我没有代表。做了一些快速而肮脏的测试,我还发现 exec("identify -ping... 比没有 -ping 快大约 20 倍。但是 getimagesize() 似乎仍然快大约 200 倍。

所以我想说 getimagesize() 是更快的方法。我只测试了jpg,没有测试png。

测试只是

$files = array('2819547919_db7466149b_o_d.jpg', 'GP1-green2.jpg', 'aegeri-lake-switzerland.JPG');
foreach($files as $file){
  $size2 = array();
  $size3 = array();
  $time1 = microtime();
  $size = getimagesize($file);
  $time1 = microtime() - $time1;
  print "$time1 \n";
  $time2 = microtime();
  exec("identify -ping $file", $size2);
  $time2 = microtime() - $time2;
  print $time2/$time1 . "\n";
  $time2 = microtime();
  exec("identify $file", $size3);
  $time2 = microtime() - $time2;
  print $time2/$time1 . "\n";
  print_r($size);
  print_r($size2);
  print_r($size3);
}
Run Code Online (Sandbox Code Playgroud)