GD與圖檔

判斷是否為圖檔

exif_imagetype( 路徑 );

回傳

常量
1 IMAGETYPE_GIF
2 IMAGETYPE_JPEG
3 IMAGETYPE_PNG
4 IMAGETYPE_SWF
5 IMAGETYPE_PSD
6 IMAGETYPE_BMP
7 IMAGETYPE_TIFF_II
8 IMAGETYPE_TIFF_MM
9 IMAGETYPE_JPC
10 IMAGETYPE_JP2
11 IMAGETYPE_JPX
12 IMAGETYPE_JB2
13 IMAGETYPE_SWC
14 IMAGETYPE_IFF
15 IMAGETYPE_WBMP
16 IMAGETYPE_XBM
false 不是圖檔

參考資料


快速取得圖片長寬

本地端的圖檔或已經上傳的用 getimagesize

list( $w, $h, $type, $text) = getimagesize($filepath);

簡單好用又快速。

 // $type 回傳數字 代表圖檔類型 , 但.. 參考就好哈哈
 (0=>'UNKNOWN', 1=>'GIF', 2=>'JPEG', 3=>'PNG', 4=>'SWF', 5=>'PSD', 6=>'BMP',
 7=>'TIFF_II', 8=>'TIFF_MM', 9=>'JPC', 10=>'JP2', 11=>'JPX', 12=>'JB2',
 13=>'SWC', 14=>'IFF', 15=>'WBMP', 16=>'XBM', 17=>'ICO', 18=>'COUNT');
 // $text 回傳文字
 height="yyy" width="xxx"

不過可以的話不想下載完整份檔案才判斷,太慢了。

以下是省時版
$filepath=$_FILES['fileToUpload']['tmp_name'];  // 本地端 這個已經上傳到本地了
$url = "http://i.imgur.com/enarCUc.jpg"; // 網路上 這個還要下載檔案

echo '<br>';

//================重點===============
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;
}
$raw = ranger($url);
//==================================
$start = microtime(true); // 計時開始

// $im=imagecreatefromjpeg($filepath); // 本地端 (慢)
$im = imagecreatefromstring($raw);

$width = imagesx($im);
$height = imagesy($im);

$stop = round(microtime(true) - $start, 5); // 停

echo $width," x ",$height," (", $stop ,"s) ";

//==================================
$start = microtime(true); // 計時開始

list( $w, $h) = getimagesize($url); // 本地端 $filepath 時反而快。

$stop = round(microtime(true) - $start, 5); // 停
echo $w," x ",$h," (", $stop , "s) ";

結果輸出:

2448 x 3264 (0.07269s) 2448 x 3264 (2.01425s)

參考資料

results matching ""

    No results matching ""