在 php 中超快速获取图像大小

2022-08-30 11:58:05

我试图获取数百个远程图像的图像大小(图像尺寸,宽度和高度),并且getimagesize太慢了。

我做了一些阅读,发现最快的方法是使用file_get_contents从图像中读取一定量的字节,并检查二进制数据中的大小。

以前有人尝试过吗?如何检查不同的格式?有人看过任何图书馆吗?


答案 1
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的数据对我有用。


答案 2

我已经为这种情况创建了一个PHP库,它的工作原理是下载确定文件大小所需的远程文件的绝对最小值。对于每个图像,这都是不同的,特别是对于JPEG,这取决于文件中嵌入的缩略图的数量。

它可以在GitHub上找到:https://github.com/tommoor/fastimage

用法示例:

$image = new FastImage($uri);
list($width, $height) = $image->getSize();
echo "dimensions: " . $width . "x" . $height;

推荐