imagecopyresampled
(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)
imagecopyresampled — 重採樣拷貝部分影象並調整大小
說明
resource
$dst_image,resource
$src_image,int
$dst_x,int
$dst_y,int
$src_x,int
$src_y,int
$dst_w,int
$dst_h,int
$src_w,int
$src_h): bool
imagecopyresampled() 將一幅影象中的一塊正方形區域拷貝到另一個影象中,平滑地插入畫素值,因此,尤其是,減小了影象的大小而仍然保持了極大的清晰度。
    In other words, imagecopyresampled() will take a 
   rectangular area from src_image of width 
   src_w and height src_h at 
   position (src_x,src_y) 
   and place it in a rectangular area of dst_image 
   of width dst_w and height dst_h
   at position (dst_x,dst_y).
  
   如果源和目標的寬度和高度不同,則會進行相應的影象收縮和拉伸。座標指的是左上角。本函式可用來在同一幅圖內部拷貝(如果
   dst_image 和 src_image
   相同的話)區域,但如果區域交迭的話則結果不可預知。
  
參數
- 
dst_image
- 
      目標圖像資源。 
- 
src_image
- 
      源圖像資源。 
- 
dst_x
- 
      目標 X 座標點。 
- 
dst_y
- 
      目標 Y 座標點。 
- 
src_x
- 
      源的 X 座標點。 
- 
src_y
- 
      源的 Y 座標點。 
- 
dst_w
- 
      目標寬度。 
- 
dst_h
- 
      目標高度。 
- 
src_w
- 
      源圖像的寬度。 
- 
src_h
- 
      源圖像的高度。 
返回值
   成功時返回 true, 或者在失敗時返回 false。
  
範例
示例 #1 簡單的例子
這個例子會將影象調整為原有尺寸的一半。
<?php
// 這個檔案
$filename = 'test.jpg';
$percent = 0.5;
// 內容型別
header('Content-Type: image/jpeg');
// 獲取新的尺寸
list($width, $height) = getimagesize($filename);
$new_width = $width * $percent;
$new_height = $height * $percent;
// 重新取樣
$image_p = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
// 輸出
imagejpeg($image_p, null, 100);
?>
以上例程的輸出類似於:
 
     
示例 #2 按比例對影象重新採樣
這個例子會以最大寬度高度為 200 畫素顯示一個影象。
<?php
// 原始檔
$filename = 'test.jpg';
// 設定最大寬高
$width = 200;
$height = 200;
// Content type
header('Content-Type: image/jpeg');
// 獲取新尺寸
list($width_orig, $height_orig) = getimagesize($filename);
$ratio_orig = $width_orig/$height_orig;
if ($width/$height > $ratio_orig) {
   $width = $height*$ratio_orig;
} else {
   $height = $width/$ratio_orig;
}
// 重新取樣
$image_p = imagecreatetruecolor($width, $height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
// 輸出
imagejpeg($image_p, null, 100);
?>
以上例程的輸出類似於:
 
     註釋
注意:
因為調色板影象限制(255+1 種顏色)有個問題。重採樣或過濾影象通常需要多於 255 種顏色,計算新的被重採樣的畫素及其顏色時採用了一種近似值。對調色板影象嘗試分配一個新顏色時,如果失敗我們選擇了計算結果最接近(理論上)的顏色。這並不總是視覺上最接近的顏色。這可能會產生怪異的結果,例如空白(或者視覺上是空白)的影象。要跳過這個問題,請使用真彩色影象作為目標影象,例如用 imagecreatetruecolor() 建立的。
參見
imagecopyresized() - 拷貝部分影象並調整大小