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)