[ コード例 ]
<?php
/**
* GD 合成位置指定画像ファイル合成
* argv : 1:ファイル名A(背景), 2:ファイル名B(パネル), 3:生成ファイル名,
* 4:合成位置 (N, NE, E, SE, S, SW, W, NW, C), 5:パッディング (オプション)
*/
// 引数取得 //
$fnm_a = $argv[1];
$fnm_b = $argv[2];
$fnm_new = $argv[3];
$mrglocation = $argv[4];
$PADDING = isset($argv[5]) ? $argv[5] : 12; // 指定がない場合は12ピクセル
// Linux 引数の" が認識されてない対策 //
$fnm_a = str_replace("^", " ", $fnm_a);
$fnm_b = str_replace("^", " ", $fnm_b);
$fnm_new = str_replace("^", " ", $fnm_new);
// A, B画像サイズ, 画像タイプ取得 //
list($a_width, $a_height, $type_a) = getimagesize($fnm_a);
list($b_width, $b_height, $type_b) = getimagesize($fnm_b);
// 対象イメージ格納 //
switch ($type_a) {
case IMAGETYPE_JPEG: // 2
$image_a = imagecreatefromjpeg($fnm_a);
break;
case IMAGETYPE_PNG: // 3
$image_a = imagecreatefrompng($fnm_a);
break;
case IMAGETYPE_GIF: // 1
$image_a = imagecreatefromgif($fnm_a);
break;
}
switch ($type_b) {
case IMAGETYPE_JPEG: // 2
$image_b = imagecreatefromjpeg($fnm_b);
break;
case IMAGETYPE_PNG: // 3
$image_b = imagecreatefrompng($fnm_b);
break;
case IMAGETYPE_GIF: // 1
$image_b = imagecreatefromgif($fnm_b);
break;
}
// コピー先の画像,コピー元の画像,コピー先のx座標,コピー先のy座標,コピー元のx座標,コピー元のy座標,コピー元の幅,コピー元の高さ //
// 合成する //
switch ($mrglocation) {
case "NW": // 左上
imagecopy($image_a, $image_b, $PADDING, $PADDING, 0, 0, $b_width, $b_height);
break;
case "NE": // 右上
imagecopy($image_a, $image_b, $a_width - $b_width - $PADDING, $PADDING, 0, 0, $b_width, $b_height);
break;
case "SE": // 右下
imagecopy($image_a, $image_b, $a_width - $b_width - $PADDING, $a_height - $b_height - $PADDING, 0, 0, $b_width, $b_height);
break;
case "SW": // 左下
imagecopy($image_a, $image_b, 12, $a_height - $b_height - $PADDING, 0, 0, $b_width, $b_height);
break;
case "N": // 上中央
imagecopy($image_a, $image_b, $a_width / 2 - $b_width / 2, $PADDING, 0, 0, $b_width, $b_height);
break;
case "S": // 下中央
imagecopy($image_a, $image_b, $a_width / 2 - $b_width / 2, $a_height - $b_height - $PADDING, 0, 0, $b_width, $b_height);
break;
case "E": // 右中央
imagecopy($image_a, $image_b, $a_width - $b_width - $PADDING, $a_height / 2 - $PADDING / 2, 0, 0, $b_width, $b_height);
break;
case "W": // 左中央
imagecopy($image_a, $image_b, $PADDING, $a_height / 2 - $PADDING / 2, 0, 0, $b_width, $b_height);
break;
case "C": // 中央中央
imagecopy($image_a, $image_b, $a_width / 2 - $b_width / 2, $a_height / 2 - $b_height / 2, 0, 0, $b_width, $b_height);
break;
}
// 結果ファイルに出力 //
$filepath = pathinfo($fnm_new);
$ext = mb_strtolower($filepath['extension']);
$res = 1;
try {
if ($ext === "jpg" || $ext === "jpeg") {
imagejpeg($image_a, $fnm_new, 100);
}
else if ($ext === "png") {
imagepng($image_a, $fnm_new, 9);
}
else if ($ext === "gif") {
imagegif($$image_a, $fnm_new, 100);
}
}
catch (Exception $ex) {
$res = 0;
}
// 解放 //
imagedestroy($image_a);
imagedestroy($image_b);
// 連想配列に格納 //
$responce = [];
$responce["Result"] = $res;
// JSONに変換して結果出力 //
//echo json_encode($responce, JSON_PRETTY_PRINT);
echo json_encode($responce);
?>
[ 利用例 ]
Aファイル (背景)
Bファイル (パネル)
合成結果 NE パディング指定あり
合成結果 SE
合成結果 SW
合成結果 NW
合成結果 S