私は自分のプロジェクトで JCrop を使用しており (ユーザーは顔をトリミングする必要があります)、座標とソース画像を PHP ハンドラーに送信しています。フローは次のようになります: ハンドラーが受け取った座標に基づいて画像をトリミングしimagecopy()
、新しく作成された画像 (私の場合は 90x90) を で作成された空のレイアウトに配置しImageCreateTrueColor()
ます。これはこれまでのところ正常に機能しますが、次のステップは次のとおりです。透明なセクションを含むpng画像をロードする必要があります。(十分に明確に説明したいと思います)これは、トリミングされた領域がある前のレイアウトと同じ幅と高さです。最後のステップは、もう一度使用しimagecopy()
て png をレイアウトの上に配置し、最終結果として、ユーザーが作成したクロップによって覆われた透明なセクションを持つテンプレートを作成することです。これが私のコードです:
$targ_w = $targ_h = 90;
$jpeg_quality = 100;
$src = $_POST['s'];
$img_r = imagecreatefromjpeg($src);
$dst_r = ImageCreateTrueColor( $targ_w, $targ_h );
imagecopyresampled($dst_r,$img_r,0,0,$_POST['x'],$_POST['y'],
$targ_w,$targ_h,$_POST['w'],$_POST['h']);
$layout = ImageCreateTrueColor(459,683);
imagecopy($layout, $dst_r, 263, 249, 0, 0, 90, 90);
$template = 'template.png';
$src_r = imagecreatefrompng($template);
$background = imagecolorallocate($src_r, 255, 255, 255);
imagecolortransparent($src_r, $background);
imagealphablending($src_r, false);
imagesavealpha($src_r, true);
imagecopy($layout, $src_r, 0, 0, 0, 0, 459, 683);
header('Content-type: image/png');
imagepng($src_r);
オンラインで見つけた多くのことを試しましたが、何も機能しないようです。編集: 問題は、トリミングされた面ではなく、透明な部分が黒くなることです。本当にアドバイスが必要です。前もって感謝します。