現在の位置: ホーム> 最新記事一覧> imageCopymerge()と融合した透明な層を実装する

imageCopymerge()と融合した透明な層を実装する

M66 2025-05-23

PHPの画像処理ライブラリGDでは、 ImageCopymerge()は、画像を別の画像に組み合わせてマージの透明度(実際にはマージの「混合のレベル」)を可能にする共通の関数です。ただし、実際のアルファチャネルを使用するなど、単純な不透明な調整ではなく)など、透明性をより細かく制御したい場合は、 ImageColorallocatealpha()で使用する必要があります。

この記事では、ImageColorallocatealpha()を使用してAlphaチャネル(透明度)で色を定義し、 ImageCopymerge()を組み合わせて透明効果と融合する層を実現する方法を紹介します。

1 ??基本的な紹介

  • ImageColorallocatealpha(Resource $ Image、Int $ Red、Int $ Green、Int $ Blue、Int $ alpha)
    指定された画像にアルファチャネルを使用して色を割り当てるために使用されます。 $ alphaの値は、0(完全に不透明)から127(完全に透明)です。

  • ImageCopymerge(リソース$ DST_IM、リソース$ src_im、int $ dst_x、int $ dst_y、int $ src_x、int $ src_y、int $ src_w、int $ src_h、int $ pct)
    $ src_imイメージを$ dst_imにコピーし、ブレンド度を$ pct (0 =完全に透明、100 =完全に不透明)で設定します。

ImageCopymerge()は実際に実際のアルファチャネルの混合をサポートしていないことに注意する必要があります。これは、ピクセルの輝度を調整することで透過効果をシミュレートするだけです。より細かい半透明のマージが必要な場合は、 ImageCopy()を使用して、ソース画像のImageColorallocatealpha()で透明な領域を埋めることができます。

2 ??サンプルコード:レイヤーが透明効果とマージします

透明な背景の層を作成し、それをメイン画像にマージする方法を示す完全な例を以下に示します。

 <?php
// メイン画像を作成します(背景)
$background = imagecreatetruecolor(400, 300);
$white = imagecolorallocate($background, 255, 255, 255);
imagefilledrectangle($background, 0, 0, 400, 300, $white);

// 透明な層を作成します
$layer = imagecreatetruecolor(200, 150);
imagesavealpha($layer, true);
$transparent = imagecolorallocatealpha($layer, 0, 0, 0, 127); // 完全に透明
imagefill($layer, 0, 0, $transparent);

// レイヤーに半透明の赤い長方形を描きます
$red_alpha = imagecolorallocatealpha($layer, 255, 0, 0, 63); // 半透明
imagefilledrectangle($layer, 20, 20, 180, 130, $red_alpha);

// レイヤーをメイン画像にマージします(知らせ imagecopymerge サポートされていません alpha 通路)
imagecopy($background, $layer, 100, 75, 0, 0, 200, 150);

// 出力結果
header('Content-Type: image/png');
imagepng($background);

// メモリをきれいにします
imagedestroy($background);
imagedestroy($layer);
?>

3 ??コード解析

  • ImageCreateTrueColor()は、真の色のキャンバスを作成するために使用されます。

  • ImagesAveAlpha()は、フラグを開き、アルファチャネルを保存して、透明な情報が失われないようにします。

  • ImageColorallocatealpha()は、透明性のある色を定義します。ここでは、完全に透明な背景と半透明の赤を作成するために使用します。

  • ImageCopyMerge()の代わりにImageCopy()は、アルファチャネルを保存するために使用されます。 ImageCopyMerge()を使用する場合、GDライブラリはアルファミキシングを強制し、 $ PCTのみを使用して透明性をシミュレートします。

  • 最後に、 ImagePng()を使用して、生成された画像を出力します。