imagecopyresampled

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

imagecopyresampled再サンプリングを行いイメージの一部をコピー、伸縮する

説明

imagecopyresampled(
    GdImage $dst_image,
    GdImage $src_image,
    int $dst_x,
    int $dst_y,
    int $src_x,
    int $src_y,
    int $dst_width,
    int $dst_height,
    int $src_width,
    int $src_height
): bool

imagecopyresampled() は、イメージの矩形の部分 を別のイメージにコピーします。同時にピクセル値を滑らかに補間を行い、 このため、特にサイズを小さくした場合には鮮明さが維持されます。

言い換えると、imagecopyresampled()src_image の座標 (src_x,src_y) にある 幅 src_width、高さ src_height の矩形領域を受け取って、それを dst_image の座標 (dst_x,dst_y) にある幅 dst_width、 高さ dst_height の矩形領域に配置します。

コピー元とコピー先の座標、幅、高さが異なる場合には、 適当なイメージ伸縮が行われます。座標は、左上を基準とします。 この関数は、同じイメージ内の領域にコピーする場合にも使用可能です (dst_imagesrc_image と同じ場合) が、領域が重なる場合の結果は予測できません。

パラメータ

dst_image

コピー先の画像リソース。

src_image

コピー元の画像リソース。

dst_x

コピー先の x 座標。

dst_y

コピー先の y 座標。

src_x

コピー元の x 座標。

src_y

コピー元の y 座標。

dst_width

コピー先の幅。

dst_height

コピー先の高さ。

src_width

コピー元の幅。

src_height

コピー元の高さ。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン 説明
8.0.0 dst_imagesrc_image は、 GdImage クラスのインスタンスを期待するようになりました。 これより前のバージョンでは、 resource を期待していました。

例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$image0000$new_width$new_height$width$height);

// 出力
imagejpeg($image_pnull100);
?>

上の例の出力は、 たとえば以下のようになります。

出力例 : 単純な例

例2 イメージを均等に再サンプルする

この例は最大の幅もしくは高さが 200 ピクセルのイメージを表示します。

<?php
// ファイル
$filename 'test.jpg';

// 最大の高さ・幅を設定します
$width 200;
$height 200;

// コンテントタイプ
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$image0000$width$height$width_orig$height_orig);

// 出力
imagejpeg($image_pnull100);
?>

上の例の出力は、 たとえば以下のようになります。

出力例 : イメージを均等に再サンプルする

注意

注意:

パレットイメージの制限(255+1色)による問題があります。 カラーの再サンプリングやフィルタリングには通常は255色以上の色が 必要となります。再サンプルするピクセルとその色を計算するために ある種の近似計算が使用されます。パレットに新しい色を割り当てよう として失敗すると、(理論的に)最も近い色が選択されます。 それは必ずしも常に可視色とは限りません。そのため、 空白(あるいは不可視な)といった不可思議な結果がもたらされます。 この問題を回避するには、imagecreatetruecolor()で 生成されるようなTrueカラーイメージを目的のイメージとして 使用してください。

参考

  • imagecopyresized() - 画像の一部をコピーしサイズを変更する
  • imagescale() - 幅と高さを指定して、画像の縮尺を変更する
  • imagecrop() - 指定した矩形に画像をクロップする
関連キーワード:  コピー, イメージ, dst, サンプリング, 伸縮, 座標, int, 行い, width, height