CakeFest 2024: The Official CakePHP Conference

Imagick::pingImage

(PECL imagick 2, PECL imagick 3)

Imagick::pingImage画像の基本属性を取得する

説明

public Imagick::pingImage(string $filename): bool

このメソッドを使用すると、画像全体を読み込まなくても 画像の幅や高さ、サイズそしてフォーマットを取得できます。

パラメータ

filename

情報を読み込むファイル名。

戻り値

成功した場合に true を返します。

add a note

User Contributed Notes 4 notes

up
3
hello at digitalnature dot eu
10 years ago
Just a warning: don't use Eero Niemi's code (identifyImage with pingImage) if you just want to get the image width and height, because it will actually be slower than reading the whole image into memory - about 10x slower!

Correct code should be:

<?php

$image
= new Imagick();
$image->pingImage($file);
$width = $image->getImageWidth();
$height = $image->getImageHeight();

?>

(this is around 15 times faster than reading the image in memory)
up
1
Sergey
11 years ago
If you don't sure whether the file exists or not or maybe it's broken, then you should use try - catch construction. It prevents code fails, when code stops execution after call of pingImage (if the file doesn't exist or it's broken).

<?php
$im
= new Imagick();
try {
$im->pingImage('3.jpg');
}
catch(
ImagickException $e) {
echo
"image doesn't exist";
}
?>
up
-7
Gynoid
8 years ago
Also you can do:

$image = new Imagick($file);
$width = $image->getImageWidth();
$height = $image->getImageHeight();

to catch the witdth/height parameters without use pingImage() initialization.
up
-8
Eero Niemi (eero at eero dot info)
15 years ago
Actually the previous example causes file to be loaded twice on Imagick's stack, proper way to do this is:

<?php

$file
= 'foo.jpg';
$image = new Imagick();
$image->pingImage($file);
$image_info = $image->identifyImage();

?>
To Top