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);