imagecopyresized

画像の一部をコピーしサイズを変更する

説明

bool imagecopyresized(
    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
)

imagecopyresized は指定した画像の矩形部分を 別の画像へコピーします。dst_image はコピー先の イメージ ID、src_image はコピー元のイメージ ID です。

言い換えると、imagecopyresizedsrc_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);
$newwidth = $width * $percent;
$newheight = $height * $percent;

// 読み込み
$thumb = imagecreatetruecolor($newwidth, $newheight);
$source = imagecreatefromjpeg($filename);

// リサイズ
imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

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

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

出力例 : イメージをリサイズする

イメージは半分サイズで出力されますが、 imagecopyresampled を使用するとより良い品質になります。

注意

注意:

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

参考

  • imagecopyresampled
  • imagescale
  • imagecrop