[PHP] GDで画像処理:外部から画像を取得する
GDでは、imagecreatefromjpeg()などで外部サーバからURL指定で画像を読み込むことができるが、その前に対象の形式を確認して関数を使い分けなければならない。
しかも、バイナリを直接読み込む機能がないので、いったん他のクラス・関数で対象画像を読み込んでから形式をチェックしてGDで扱うには、一度ローカルにファイルとして保存し、それを再度GDで読み込むしかない。
しかし、imagecreatefromstring()とcurlを利用することで、直接バイナリをロードすることが簡単に可能になる。
imagecreatefromstring()は画像形式を自動でチェックしてくれるものの、その名のとおりバイナリを文字列形式にしたものしか読み込めない。
そこで、curlでレスポンスを文字列として受け取るよう、オプションに「CURLOPT_RETURNTRANSFER」を設定する。
/** * @author takasho * MIT License */ function imagecreatefrombinary($url, $timeout = 30) { $curlHandler = curl_init($url); $optionSet = array( CURLOPT_TIMEOUT => $timeout, CURLOPT_RETURNTRANSFER => true, ); curl_setopt_array($curlHandler, $optionSet); $result = curl_exec($curlHandler); if (!$result || curl_errno($curlHandler)) { curl_close($curlHandler); return null; } curl_close($curlHandler); return imagecreatefromstring($result); }
これで、手軽にGDで外部画像を扱えるようになる。