背景とヘルメットの PNG を取得する必要があります。ヘルメットは真ん中が透明です。PHP では、JPG の上と左の座標、および幅と高さを渡します。JPGを取得してPNGの下に配置し、送信するサイズにし(指定したサイズに大きくまたは小さく変更します)、PNGの下のXとYに配置し、PNGを最も前面にします. つまり、JPG の PNG 境界線の外側にある部分はすべて切り取られ、結果の画像は、PNG の幅と高さで JPG にオーバーレイされた PNG になります。
これは私が現在持っているものですが、頭があるべき場所に黒い背景でヘルメットを保存しているだけです.
$photo1 = imagecreatefromjpeg($_POST['photo']);
$foto1W = imagesx($photo1);
$foto1H = imagesy($photo1);
$photoFrameW = $res['width'];
$photoFrameH = $res['height'];
$photoFrame = imagecreatetruecolor($photoFrameW,$photoFrameH);
imagecopyresampled($photoFrame, $photo1, 0, 0, 0, 0, $photoFrameW, $photoFrameH, $foto1W, $foto1H);
$photo2 = imagecreatefrompng('images/casco.png');
$foto2W = imagesx($photo2);
$foto2H = imagesy($photo2);
$photoFrame2W = '500';
$photoFrame2H = '556';
$photoFrame2 = imagecreatetruecolor($photoFrame2W,$photoFrame2H);
$trans_colour = imagecolorallocatealpha($photoFrame2, 0, 0, 0, 127);
imagefill($photoFrame2, 0, 0, $trans_colour);
imagecopyresampled($photoFrame2, $photo2, 0, 0, 0, 0, $photoFrame2W, $photoFrame2H, $foto2W, $foto2H);
imagecopy($photoFrame2, $photoFrame, $res['left']+556, $res['top'], 0, 0, imagesx($photoFrame), imagesy($photoFrame));
imagejpeg($photoFrame2, "fb_images/$codigo2.jpg");