# imagecopyresampled

(PHP 4 >= 4.0.6, PHP 5, PHP 7)

imagecopyresampled — 重采样拷贝部分图像并调整大小

### 说明

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`。

### 范例

Example #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);
    ?>

以上例程的输出类似于：

Example #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);
    ?>

以上例程的输出类似于：

### 注释

> Note:

> 因为调色板图像限制（255+1 种颜色）有个问题。重采样或过滤图像通常需要多于 255 种颜色，计算新的被重采样的像素及其颜色时采用了一种近似值。对调色板图像尝试分配一个新颜色时，如果失败我们选择了计算结果最接近（理论上）的颜色。这并不总是视觉上最接近的颜色。这可能会产生怪异的结果，例如空白（或者视觉上是空白）的图像。要跳过这个问题，请使用真彩色图像作为目标图像，例如用 imagecreatetruecolor() 创建的。

### 参见

imagecopyresized() - 拷贝部分图像并调整大小