有兩種改變圖像大小的方法.
(1):ImageCopyResized() 函式在所有GD版本中有效,但其縮放圖像的算法比較粗糙.
(2):ImageCopyResampled(),其像素插值算法得到的圖像邊緣比較平滑.質量較好(但該函式的速度比 ImageCopyResized() 慢).
兩個函式的參數是一樣的.如下:
ImageCopyResampled(dest,src,dx,dy,sx,sy,dw,dh,sw,Sh);
ImageCopyResized(dest,src,dx,dy,sx,sy,dw,dh,sw,sh);
它們兩個都是從原圖像(source)中抓取特定位置(sx,sy)複製圖像qu區域到目標t圖像(destination)的特定位置(dx,dy)。另外dw,dh指定複製的圖像區域在目標圖像上的大小,sw,sh指定從原圖像複製的圖像區域的大小。如果有ps經驗的話,就相當於在原圖像選擇一塊區域,剪下移動到目的圖像上,同時有拉伸或縮小的操作。
本例將以原來的四分之一大小顯示圖像。
// 指定檔案路徑和縮放比例 $filename = 'test.jpg'; $percent = 0.5; // 指定頭檔案Content typezhi值 header('Content-type: image/jpeg'); // 獲取圖片的寬高 list($width, $height) = getimagesize($filename); $newwidth = $width * $percent; $newheight = $height * $percent; // 創建一個圖片。接收參數分別為寬高,返回生成的資源句柄 $thumb = imagecreatetruecolor($newwidth, $newheight); //獲取源檔案資源句柄。接收參數為圖片路徑,返回句柄 $source = imagecreatefromjpeg($filename); // 將源檔案剪下全部域並縮小放到目標圖片上。前兩個為資源句柄 imagecopyresampled($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); // 輸出給瀏覽器 imagejpeg($thumb); ?> |
// 檔案路徑 $filename = 'test.jpg'; // 最大寬高 $width = 200; $height = 200; // 設定http頭Content type值 header('Content-type: image/jpeg'); // 獲取圖片寬高 list($width_orig, $height_orig) = getimagesize($filename); if ($width && ($width_orig < $height_orig)) { //高比寬大,高為200,kuan寬按比例縮小 $width = ($height / $height_orig) * $width_orig; }else { $height = ($width / $width_orig) * $height_orig; } // 改變大小。和上例一樣。 $image_p = imagecreatetruecolor($width, $height); $image = imagecreatefromjpeg($filename); imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig); // Output imagejpeg($image_p, null,100) ?> |