有些網站在貼圖的時候要手動指定大小很不方便,用以下的程式就可以快速地抓到圖片大小
原理是抓取檔案的標頭,讀取裡面的資訊
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); // 這邊做例外處理 }
留言