我想要获得远程托管JPG的尺寸,宽度和高度。我已经看到通过下载完整图像可以做到这一点。
但是,如果我可以通过下载足够只是获取此信息来做到这一点将是理想的。
典型的图像尺寸为200K,读数仅为几K. 威力 在开始时可能足够JPG:
curl_setopt($ch, CURLOPT_RANGE, "0-4096");
作为参考,我已经按照这些答案/评论但无济于事(尽管它们可能在正确的轨道上):
有没有人能够将这些碎片放在一起(没有ImageMagick)?
我想要获得远程托管JPG的尺寸,宽度和高度。我已经看到通过下载完整图像可以做到这一点。
但是,如果我可以通过下载足够只是获取此信息来做到这一点将是理想的。
典型的图像尺寸为200K,读数仅为几K. 威力 在开始时可能足够JPG:
curl_setopt($ch, CURLOPT_RANGE, "0-4096");
作为参考,我已经按照这些答案/评论但无济于事(尽管它们可能在正确的轨道上):
有没有人能够将这些碎片放在一起(没有ImageMagick)?
如何使用ImageMagick ping
这样的功能:
identify -ping -format "%wx%h" http://www.google.com/logos/giroux1.jpg
482x142
根据 从二进制文件中获取JPEG的图像大小,图像的大小不存储在文件中的精确位置。根据扩展名,您可以在实际大小之前在文件中包含大量数据,例如thumbmail。
以下C ++代码应该是您自己的PHP实现的良好开端: http://www.64lines.com/jpeg-width-height。您可以通过访问包含数据的字符串(如数组)来轻松调整此代码: myString{$i}
代替 data[i]
您应该加载相对较大的数据块并对其进行解析,然后在必要时加载更多数据。或者您可以逐块加载文件,但是由众多连接引起的开销会导致无法加载整个文件的目的。
无论如何,我不确定这些好处是否足以证明你花在这上面的时间。现在200k都不算什么。
我设法回答了我自己的问题,并且我已经包含了PHP代码片段。
唯一的缺点(至少对我来说)是在读取尺寸之前将部分图像下载写入文件系统 getImageSize
。
为了我 10240 bytes是检查大小为200到400K的jpg图像的安全限制。
function remoteImage($url){
$ch = curl_init ($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
curl_setopt($ch, CURLOPT_RANGE, "0-10240");
$fn = "partial.jpg";
$raw = curl_exec($ch);
$result = array();
if(file_exists($fn)){
unlink($fn);
}
if ($raw !== false) {
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status == 200 || $status == 206) {
$result["w"] = 0;
$result["h"] = 0;
$fp = fopen($fn, 'x');
fwrite($fp, $raw);
fclose($fp);
$size = getImageSize($fn);
if ($size===false) {
// Cannot get file size information
} else {
// Return width and height
list($result["w"], $result["h"]) = $size;
}
}
}
curl_close ($ch);
return $result;
}
上面提到的donohoe答案的改进版本。这个检索png和gif文件的较小字节范围,如上所述 这里。
function remoteImage($url){
$filename = parse_url($url);
$pi = pathinfo($filename['path'],PATHINFO_EXTENSION);
switch ($pi) {
case "jpg" :
$range = "0-15000";
break;
case "jpeg" :
$range = "0-10000";
break;
case "png":
$range = "0-100";
break;
case "gif":
$range = "0-10";
break;
default:
$range = "0-15000";
break;
}
$ch = curl_init ($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
curl_setopt($ch, CURLOPT_RANGE, $range);
$fn = "partial2.png";
$raw = curl_exec($ch);
$result = array();
if(file_exists($fn)){
unlink($fn);
}
if ($raw !== false) {
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status == 200 || $status == 206) {
$result["w"] = 0;
$result["h"] = 0;
$fp = fopen($fn, 'x');
fwrite($fp, $raw);
fclose($fp);
$size = getImageSize($fn);
if ($size===false) {
// Cannot get file size information
} else {
// Return width and height
list($result["w"], $result["h"]) = $size;
}
}
}
curl_close ($ch);
return $result;
}