PHP で画像ファイルを一時保存せずに縦横幅を知る

PHP で画像ファイルを一時保存せずに縦横幅を知る

最近、暑かったり寒かったりで、毎朝上着を着るかどうかで迷う kimoto です。

さて本日は小ネタ。

PHP で画像の縦横サイズ(等)を知りたい場合、通常 getimagesize を使うことが多いと思います。
しかし、この関数で画像情報を取得するには、サーバ上のパスを指定する必要があります。
例えば画像を DB に文字列として取り込んでおり、それの縦横サイズが必要な時に使えなかったりします。さてどうしよう。
ということで解決策をご紹介です。

getimagesizefromstring を使う

恥ずかしながらこの関数の存在を最近知ったんですが、こんなのあったんですね。
これは getimagesize とほぼ同じ動きをしますが、違いは文字列から情報を取得できるというところです。
たとえばこのようになります。

$image = '/var/www/httpd/images/test.png';

// ファイルとして開く場合
$image_a = getimagesize($image);

// 文字列として開く場合
$data = file_get_contents($image);
$image_b = getimagesizefromstring($data);

これは便利。
ただし、この関数は PHP5.4 以上で実装されているのでそれ以下では使えないのがネックです。

imagecreatefromstring を使う

プロジェクトによっては、PHP のバージョンを上げられない物もあると思います。その場合はどうするか?
GD ライブラリの imagecreatefromstring を使いましょう。これを使うと、関数名の通り、文字列を画像として扱えるようになります。

$image = '/var/www/httpd/images/test.png';
$image_data = imagecreatefromstring(file_get_contents($image));

これで画像として扱えるようになりました。
そしたら同じく GD の imagesx や imagesy でサイズを取得できます。

$width  = imagesx($image_data);
$height = imagesy($image_data);

参考

  • このエントリーをはてなブックマークに追加

この記事を読んだ人にオススメ