有些網站在貼圖的時候要手動指定大小很不方便,用以下的程式就可以快速地抓到圖片大小
原理是抓取檔案的標頭,讀取裡面的資訊
PNG檔獨立檢查是因為他的data chunk有CRC檢查,檔案不完整會失敗,要是整個載下來,圖檔太大就會讓執行速度拖慢
$url = "http://example.com/test.png";
$rawdata = ranger($url);
list($weight, $height) = parseImage($rawdata);
function ranger($url){
$headers = array("Range: bytes=0-4096"); //只取圖片的前4KB
$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;
}
function parseImage($raw){
$hex = bin2hex($raw);
// 先辨認PNG的signature,不是的話再用GD檢查
if (substr($hex, 0, 16) === '89504e470d0a1a0a') {
$weight = hexdec(substr($hex, 32, 8));
$height = hexdec(substr($hex, 40, 8));
return array($weight, $height);
} elseif ($im = imagecreatefromstring($raw)) {
return array(imagesx($im), imagesy($im));
}
return array(-1, -1); // 這邊做例外處理
}
留言