在 php 中超快速获取图像大小
2022-08-30 11:58:05
我试图获取数百个远程图像的图像大小(图像尺寸,宽度和高度),并且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 x 480 (0.20859s)
加载32kb的数据对我有用。
我已经为这种情况创建了一个PHP库,它的工作原理是下载确定文件大小所需的远程文件的绝对最小值。对于每个图像,这都是不同的,特别是对于JPEG,这取决于文件中嵌入的缩略图的数量。
它可以在GitHub上找到:https://github.com/tommoor/fastimage
用法示例:
$image = new FastImage($uri);
list($width, $height) = $image->getSize();
echo "dimensions: " . $width . "x" . $height;