PHPでのgetimagesizeについて質問です。


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
です。

よろしくお願いします。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2011/10/18 23:48:47
  • 終了:2011/10/25 23:50:03

ベストアンサー

id:tigerjp No.1

たいがあ回答回数19ベストアンサー獲得回数62011/10/19 00:25:51

ポイント100pt

画像を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);

id:DQNEO

imagecreatefromstringで、channelsとbitsの取得はできますか?

HTTPリクエストが2回が嫌な理由は、失敗確率が2倍になるからです。

ローカル保存はありですね。

getimagesize関数だって内部的にはfopenしてるはずだから、getimagesize(file_get_contents($file))みたいなのがができないのはおかしい、と思ってしまったのです。

2011/10/19 01:06:43
  • id:DQNEO
    getimagesize(file_get_contens($url));

    が何故できないのか、不思議でしょうがない。

  • id:DQNEO
    あ、ここにヒントが!

    http://wakuworks.jugem.jp/?eid=157
  • id:tigerjp
    お、これならimagecreatefromstring無しでいけますね。
    stream_wrapper_registerという手もありましたが、base64_encodeとはお見事な妙案です。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません