<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 記事タイトル:imagealphablending そして imagecopy 一緒に使用する方法?透明な合成の正しいデモンストレーション</span></span><span>
</span><span><span class="hljs-meta">?></span></span><span>
---
存在する PHP 画像処理が実行されたとき,`imagealphablending` そして `imagecopy` これらは、非常に一般的に使用される2つの関数です,尤其是存在する涉及透明度合成そして图像合成的场景中。これら2つの関数を組み合わせて使用します,透明な背景を持つ画像合成を実現できます,像是存在する海报制作、GIF 合成および透かしの追加作業において非常に実用的です。。
</span><span><span class="hljs-comment">### 1. `imagealphablending` 関数の紹介</span></span><span>
`imagealphablending` これは、画像がオンになっているかどうかを制御する関数です。。它影响的是图像的透明度そして混合方式。ハイブリッドモードがオンの場合,画像の透明な部分は、背景画像の色に応じて合成されます。
</span><span><span class="hljs-comment">#### 関数プロトタイプ:</span></span><span>
```php
</span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-title function_ invoke__">imagealphablending</span></span><span>(resource </span><span><span class="hljs-variable">$image</span></span><span>, </span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-variable">$blendmode</span></span><span>);
</span></span>
$画像:操作する必要がある画像リソース。
$ blendMode :ブール値、真の意味は混合モードを有効にすることを意味します。
デフォルトでは、画像化可能な行為はブレンディングモードを有効にするように動作します。つまり、ピクセルの透明部分が背景画像とブレンドされます。
ImageCopy関数は、1つの画像を別の画像で指定された場所にコピーするために使用されます。透明なピクセルのコピーをサポートするため、透明な画像を処理する際に画像可能性と組み合わせて使用できます。
<span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-title function_ invoke__">imagecopy</span></span><span>(resource </span><span><span class="hljs-variable">$dst_image</span></span><span>, resource </span><span><span class="hljs-variable">$src_image</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$dst_x</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$dst_y</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$src_x</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$src_y</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$src_width</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$src_height</span></span><span>);
</span></span>
$ DST_IMAGE :ターゲット画像リソース。
$ src_image :ソース画像リソース。
$ dst_x 、 $ dst_y :ターゲット画像の左上隅の位置。
$ src_x 、 $ src_y :ソース画像の左上隅の位置。
$ src_width 、 $ src_height :ソース画像からコピーされる領域の幅と高さ。
透明な画像合成を実行するとき、ソースとターゲット画像の両方が透明性を正しく処理することを保証することが最も重要です。画像と画像像を組み合わせた透明な合成の正しいデモンストレーションを次に示します。
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 创建目标图像そして源图像资源</span></span><span>
</span><span><span class="hljs-variable">$dst_image</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecreatetruecolor</span></span><span>(</span><span><span class="hljs-number">500</span></span><span>, </span><span><span class="hljs-number">500</span></span><span>);
</span><span><span class="hljs-variable">$src_image</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecreatefrompng</span></span><span>(</span><span><span class="hljs-string">'source_image.png'</span></span><span>); </span><span><span class="hljs-comment">// ソース画像はaであると仮定します PNG 形式</span></span><span>
</span><span><span class="hljs-comment">// ターゲット画像の透明な背景を設定します</span></span><span>
</span><span><span class="hljs-title function_ invoke__">imagesavealpha</span></span><span>(</span><span><span class="hljs-variable">$dst_image</span></span><span>, </span><span><span class="hljs-literal">true</span></span><span>);
</span><span><span class="hljs-variable">$transparent</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecolorallocatealpha</span></span><span>(</span><span><span class="hljs-variable">$dst_image</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">127</span></span><span>); </span><span><span class="hljs-comment">// 透明な色</span></span><span>
</span><span><span class="hljs-title function_ invoke__">imagefill</span></span><span>(</span><span><span class="hljs-variable">$dst_image</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-variable">$transparent</span></span><span>);
</span><span><span class="hljs-comment">// 透明なハイブリッドモードをオンにします</span></span><span>
</span><span><span class="hljs-title function_ invoke__">imagealphablending</span></span><span>(</span><span><span class="hljs-variable">$dst_image</span></span><span>, </span><span><span class="hljs-literal">true</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">imagecopy</span></span><span>(</span><span><span class="hljs-variable">$dst_image</span></span><span>, </span><span><span class="hljs-variable">$src_image</span></span><span>, </span><span><span class="hljs-number">100</span></span><span>, </span><span><span class="hljs-number">100</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-title function_ invoke__">imagesx</span></span><span>(</span><span><span class="hljs-variable">$src_image</span></span><span>), </span><span><span class="hljs-title function_ invoke__">imagesy</span></span><span>(</span><span><span class="hljs-variable">$src_image</span></span><span>));
</span><span><span class="hljs-comment">// 合成された画像を出力します</span></span><span>
</span><span><span class="hljs-title function_ invoke__">header</span></span><span>(</span><span><span class="hljs-string">'Content-Type: image/png'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">imagepng</span></span><span>(</span><span><span class="hljs-variable">$dst_image</span></span><span>);
</span><span><span class="hljs-comment">// リソースをクリーンアップします</span></span><span>
</span><span><span class="hljs-title function_ invoke__">imagedestroy</span></span><span>(</span><span><span class="hljs-variable">$dst_image</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">imagedestroy</span></span><span>(</span><span><span class="hljs-variable">$src_image</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
ターゲット画像を作成します:
ImageCreateTrueColor()を使用して、サイズ500x500のターゲット画像リソースを作成します。
ソース画像の読み込み:
ImageCreatefrommpng()を使用してソース画像をロードすると、PNGは透明な背景をサポートしているため、PNGファイルであると仮定します。
透明な背景を設定します:
ImagesAvealpha()は、画像の透明性情報を保存するようにPHPに指示します。
ImageColorallocatealpha()は、透明な色を割り当て、ターゲット画像全体をImageFill()で埋めて、ターゲット画像が透過的であることを確認します。
透明なハイブリッドモードをオンにします:
Imagealphableending($ dst_image、true)を使用して、透明な合成のブレンドモードを有効にします。
合成画像:
ImageCopy()を使用して、ソース画像をターゲット画像の指定された位置にコピーします。合成効果は、ソース画像の透明度を維持します。
出力画像:
最後に、合成された画像はImagePng()を介して出力されます。
リソースのクリーンアップ:
Imagedestroy()を使用して画像リソースをクリーンアップして、メモリの漏れを避けます。
画像合成を透明に扱う際に、画像能力とイメージコピー関数の組み合わせにより、PHPが非常に効率的になります。重要なのは、ターゲット画像が透明性情報を正しく処理し、合成中に透明なブレンドモードをオンにして、ソース画像の透明部分を正しく表示できるようにすることです。
これら2つの機能を合理的に使用することにより、透明性処理を必要とするさまざまな画像編集シナリオに適した透明画像の合成効果を簡単に実現できます。