1

imagickで処理済み。

しかし、すでに処理されたファイルがたくさんあり、いずれかの方法でそれらの幅/高さのみを抽出したいと考えています。

私が理解しているように、Imagick から getImageWidth はファイル全体を読み取り、その内部構造内にもロードします。

私が知りたいのは、exifまたはgdには、画像の幅/高さのみを取得するためのより軽量な方法があります。

// exif メタを信頼しても問題ありません

4

1 に答える 1

7

127 個の PNG 画像でベンチマークを行いました。GDとImagickの中ではGDが一番速いようです。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                     |
+------------------------------------+---------------------------+

ImageMagic Multiple Instance は、異なるイメージに対して異なるインスタンスを初期化することを意味します

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

ImageMagic Single Instance とは、反復可能な Imagick のインスタンスを 1 つ使用することを意味します。

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

ImageMagick Single Instance pingImage は、ロード後にディメンションを取得することを意味しますpingImage

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

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";
}

そして最後にGD、

foreach($pngs as $png) {
    list($width, $height) = getimagesize ($png);
}

注: Exif 拡張子は画像のサイズを取得できません。これはPHPのマニュアルに書いてありますが、

高さはgetimagesize()と同じ方法で計算されるため、それらの値は返されるヘッダーの一部であってはなりません。また、 htmlは、通常の HTML 内で使用される高さ/幅のテキスト文字列です。

于 2013-01-16T08:49:45.630 に答える