imagickで処理済み。
しかし、すでに処理されたファイルがたくさんあり、いずれかの方法でそれらの幅/高さのみを抽出したいと考えています。
私が理解しているように、Imagick から getImageWidth はファイル全体を読み取り、その内部構造内にもロードします。
私が知りたいのは、exifまたはgdには、画像の幅/高さのみを取得するためのより軽量な方法があります。
// exif メタを信頼しても問題ありません
imagickで処理済み。
しかし、すでに処理されたファイルがたくさんあり、いずれかの方法でそれらの幅/高さのみを抽出したいと考えています。
私が理解しているように、Imagick から getImageWidth はファイル全体を読み取り、その内部構造内にもロードします。
私が知りたいのは、exifまたはgdには、画像の幅/高さのみを取得するためのより軽量な方法があります。
// exif メタを信頼しても問題ありません
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 内で使用される高さ/幅のテキスト文字列です。