[PHP] 辨識遠端圖片大小

有些網站在貼圖的時候要手動指定大小很不方便,用以下的程式就可以快速地抓到圖片大小

原理是抓取檔案的標頭,讀取裡面的資訊

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); // 這邊做例外處理
}

留言

粗體斜體刪除線連結引用圖片程式碼

注意:您的電子信箱將不會被公開,且網站連結不會被搜尋引擎採計

{124} {123} {122} {121} {120} {119} {118} {117} {116} {115} {114} {113} {112} {111} {100} {025} {024} {023} {022} {021} {020} {019} {018} {017} {016} {015} {014} {013} {012} {011} {010} {009} {008} {007} {006} {005} {004} {003} {002} {001}