-1

背景とヘルメットの 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");
4

1 に答える 1

0

上記を出発点として使用して、自分で考え出しました。問題は 2 つあります。間違った画像を一番上に配置していたことと、画像を再配置するのに適切な場所を使用していなかったことです。挿入する前に、画像のサイズと位置を変更しました。次に、最後にJPGの上にPNGを挿入しました。

    $photo1 = imagecreatefromjpeg($_POST['photo']);
    $foto1W = imagesx($photo1);
    $foto1H = imagesy($photo1);
    $photoFrameW = $res['width'];
    $photoFrameH = $res['height'];
    $photoFrame = imagecreatetruecolor(500,556);
    imagecopyresampled($photoFrame, $photo1, $res['left'], $res['top']+556, 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($photoFrame, $photoFrame2, 0, 0, 0, 0, imagesx($photoFrame2), imagesy($photoFrame2));

    imagejpeg($photoFrame, "fb_images/$codigo2.jpg");
于 2012-08-30T19:14:51.247 に答える