http://php.net/manual/ja/function.getimagesize.php
メモリ上の画像データをもとに、画像情報を取得する方法はないでしょうか?
やりたいのは下記のようなことです。
--- やりたいこと ----
$url = 'http://example.com/a.jpg';
$data = file_get_contents($url);
$sizeinfo = getimagesize($data); // エラー
----
$sizeinfo = getimagesize($url)
と書けば動くのですが、HTTPリクエストを2回も投げるのが嫌なのです。
(パフォーマンスが悪いし、エラー処理も2回やらないといけなくなる)
ちなみにgetimagesizeで知りたいのは、
・高さ
・幅
・channels
・bits
です。
よろしくお願いします。
画像をfile_get_contentsするとバイナリデータですから、パス情報を必要とするgetimagesizeは失敗します。
直接パスをgetimagesizeして諦めて下さい。
HTTPリクエストが嫌ならローカルに保存するしかありません。
と思ったら、こんなのできました。
$url = 'http://example.com/a.jpg’;
$data = file_get_contents($url);
$im = imagecreatefromstring($data); // バイナリをリソースIDにする
echo 'width='.imagesx($im);
echo ' height='.imagesy($im);
私の環境では、HTTPリクエストを発生させた方が全体の処理が早かったです。
【追記】
自己解決という事でポイント不要です。
$url = 'http://example.com/a.jpg’;
$data = file_get_contents($url);
/* http://wakuworks.jugem.jp/?eid=157 */
$img = base64_encode($data);
$scheme = 'data:application/octet-stream;base64,';
$size = getimagesize($scheme . $img);
var_dump($size);
imagecreatefromstringで、channelsとbitsの取得はできますか?
HTTPリクエストが2回が嫌な理由は、失敗確率が2倍になるからです。
ローカル保存はありですね。
getimagesize関数だって内部的にはfopenしてるはずだから、getimagesize(file_get_contents($file))みたいなのがができないのはおかしい、と思ってしまったのです。