阅读图片尺寸:exif vs gd vs imagemagick?

gaR*_*Rex 1 php gd exif image-processing imagick

处理已经由imagick完成.

但是我们已经处理了一堆文件,其中一个方法只想提取它们的宽度/高度.

据我了解,Imagick getImageWidth读取整个文件并将其加载到其内部结构中.

我想知道 - 是exif还是gd有一些更轻量级的方法来获得只有widht/height的图像.

//可以信赖exif meta

Shi*_*dim 7

我刚刚对127张PNG图像进行了基准测试.看起来GD是 GD和Imagick中最快的.如果您只想使用ImageMagick,pingImage请先加载文件并检索宽度和高度.这是IM方法中最快的.但仍然比GD慢3倍.

+------------------------------------+---------------------------+
| Script/Task name                   | Execution time in seconds |
+------------------------------------+---------------------------+
| GD                                 | 0.010726928710938         |
| IM Multiple Instance               | 1.9311830997467           |
| IM Single Instance                 | 2.0554959774017           |
| IM Single Instance identifyImage   | 1.4270191192627           |
| IM Single Instance pingImage       | 0.036259889602661         |
| imagedimension-exif-gd-imagick.php | 5.467                     |
+------------------------------------+---------------------------+
Run Code Online (Sandbox Code Playgroud)

ImageMagic Multiple Instance意味着为不同的图像初始化不同的实例

foreach($pngs as $png){
    $im = new Imagick($png);
    list($width, $height) =array($im->getimagewidth(), $im->getimageheight());
}
Run Code Online (Sandbox Code Playgroud)

ImageMagic Single Instance意味着使用一个可迭代的Imagick实例

$images =  new \Imagick($pngs);
foreach($images as $im){
    list($width, $height) =array($im->getimagewidth(), $im->getimageheight());
}
Run Code Online (Sandbox Code Playgroud)

ImageMagick单实例pingImage意味着在使用后加载维度 pingImage

$im = new Imagick();
foreach($pngs as $png){
    $im->pingImage($png);
    list($width, $height) =array($im->getimagewidth(), $im->getimageheight());
}
Run Code Online (Sandbox Code Playgroud)

ImageMagick Single Instance identifyImage表示在加载后识别图像 pingImage();

$im = new Imagick();
foreach($pngs as $png){
    $im->pingImage($png);
    $im_info = $im->identifyImage();
    extract($im_info['geometry']);
    //echo $width. "x$height\n";
}
Run Code Online (Sandbox Code Playgroud)

最后是GD,

foreach($pngs as $png) {
    list($width, $height) = getimagesize ($png);
}
Run Code Online (Sandbox Code Playgroud)

注意: Exif扩展无法获取图像尺寸.这是用PHP手册编写的,

高度宽度的计算方式与 getimagesize()相同,因此它们的值不能是返回的任何头的一部分.另外, html是在普通HTML中使用的高度/宽度文本字符串.