何百ものリモート画像の画像サイズ (画像のサイズ、幅、高さ) を取得しようとしていますが、getimagesize
遅すぎます。
私はいくつかの読み取りを行いfile_get_contents
、画像から一定量のバイトを読み取り、バイナリデータ内のサイズを調べるために使用するのが最も速い方法であることがわかりました。
誰もこれを以前に試みましたか?さまざまな形式を調べるにはどうすればよいですか? 誰もがこれのためのライブラリを見たことがありますか?
何百ものリモート画像の画像サイズ (画像のサイズ、幅、高さ) を取得しようとしていますが、getimagesize
遅すぎます。
私はいくつかの読み取りを行いfile_get_contents
、画像から一定量のバイトを読み取り、バイナリデータ内のサイズを調べるために使用するのが最も速い方法であることがわかりました。
誰もこれを以前に試みましたか?さまざまな形式を調べるにはどうすればよいですか? 誰もがこれのためのライブラリを見たことがありますか?
function ranger($url){
$headers = array(
"Range: bytes=0-32768"
);
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($curl);
curl_close($curl);
return $data;
}
$start = microtime(true);
$url = "http://news.softpedia.com/images/news2/Debian-Turns-15-2.jpeg";
$raw = ranger($url);
$im = imagecreatefromstring($raw);
$width = imagesx($im);
$height = imagesy($im);
$stop = round(microtime(true) - $start, 5);
echo $width." x ".$height." ({$stop}s)";
テスト...
640×480(0.20859秒)
32kb のデータをロードするとうまくいきました。
まさにこのシナリオ用の PHP ライブラリを作成しました。これは、ファイルサイズを決定するために必要なリモート ファイルの絶対最小値をダウンロードすることで機能します。これは画像ごとに異なり、特に JPEG の場合は、ファイルに埋め込まれたサムネイルの数によって異なります。
GitHub で入手できます: https://github.com/tommoor/fastimage
使用例:
$image = new FastImage($uri);
list($width, $height) = $image->getSize();
echo "dimensions: " . $width . "x" . $height;