imagecopyresampled
再サンプリングを行いイメージの一部をコピー、伸縮する
説明
bool 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
)
言い換えると、imagecopyresampled は
src_image
の座標 (src_x
,src_y
) にある
幅 src_width
、高さ src_height
の矩形領域を受け取って、それを dst_image
の座標 (dst_x
,dst_y
)
にある幅 dst_width
、
高さ dst_height
の矩形領域に配置します。
コピー元とコピー先の座標、幅、高さが異なる場合には、
適当なイメージ伸縮が行われます。座標は、左上を基準とします。
この関数は、同じイメージ内の領域にコピーする場合にも使用可能です
(dst_image
が src_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
を返します。
例
例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;
// コンテントタイプ
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で
生成されるようなTrueカラーイメージを目的のイメージとして
使用してください。
参考
- imagecopyresized
- imagescale
- imagecrop