人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

よろしくお願いします。



●質問者: DQNEO
●カテゴリ:コンピュータ インターネット
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● たいがあ
●100ポイント ベストアンサー

画像を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))みたいなのがができないのはおかしい、と思ってしまったのです。

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ