<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// この記事は、記事の例のコードフレームワークです</span></span><span>
</span><span><span class="hljs-comment">// 記事はコードとは何の関係もありません,以下は、分離前のコンテンツのみです</span></span><span>
</span><span><span class="hljs-meta">?></span></span><span>
<hr>
</span><span><span class="hljs-comment"># 合格する方法 imagecreatetruecolor そして imagealphablending 画像の半透明効果を実装します?</span></span><span>
存在する PHP 画像処理ライブラリ GD 真ん中,`</span><span><span class="hljs-title function_ invoke__">imagecreatetruecolor</span></span><span>()` そして `</span><span><span class="hljs-title function_ invoke__">imagealphablending</span></span><span>()` よく使用される2つの関数です。它们能够帮助开发者存在する生成图像时实现半透明效果,これにより、画像の重ね合わせがより自然になります。本文将介绍它们的基本原理そして实际应用。
</span><span><span class="hljs-comment">## 1. imagecreatetruecolor の役割</span></span><span>
`</span><span><span class="hljs-title function_ invoke__">imagecreatetruecolor</span></span><span>()` 真のカラー画像リソースを作成するために使用されます。そして `</span><span><span class="hljs-title function_ invoke__">imagecreate</span></span><span>()` 違う,它支持更多的颜色深度そして更高的质量。通話方法は次のとおりです:
```php
</span><span><span class="hljs-variable">$img</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecreatetruecolor</span></span><span>(</span><span><span class="hljs-number">200</span></span><span>, </span><span><span class="hljs-number">200</span></span><span>);
</span></span>これにより、200×200のキャンバスが生成され、その後の描画操作が継続されます。
Imagealphableending()関数は、混合モードを設定するために使用されます。ブレンドモードが有効になっている場合、画像または色を描画するときに新しいピクセルが既存のピクセルと混合され、半透明の効果が得られます。
例えば:
<span><span><span class="hljs-title function_ invoke__">imagealphablending</span></span><span>(</span><span><span class="hljs-variable">$img</span></span><span>, </span><span><span class="hljs-literal">true</span></span><span>);
</span></span>Trueに設定すると、色のオーバーレイは、直接上書きするのではなく、透明性でブレンドされます。
透明な効果を持つPNGを生成する場合、 ImagesAvealpha()を使用して、透明チャネルを正しく保存できることを確認する必要があります。
<span><span><span class="hljs-title function_ invoke__">imagesavealpha</span></span><span>(</span><span><span class="hljs-variable">$img</span></span><span>, </span><span><span class="hljs-literal">true</span></span><span>);
</span></span>このようにして、PNGファイルを保存するときに透明な部分が有効になります。
半透明の長方形を生成する完全な例を次に示します。
<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">$img</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecreatetruecolor</span></span><span>(</span><span><span class="hljs-number">200</span></span><span>, </span><span><span class="hljs-number">200</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">$img</span></span><span>, </span><span><span class="hljs-literal">true</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">imagesavealpha</span></span><span>(</span><span><span class="hljs-variable">$img</span></span><span>, </span><span><span class="hljs-literal">true</span></span><span>);
</span><span><span class="hljs-comment">// 透明な背景を割り当てます</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">$img</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-title function_ invoke__">imagefilledrectangle</span></span><span>(</span><span><span class="hljs-variable">$img</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">200</span></span><span>, </span><span><span class="hljs-number">200</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-variable">$red</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecolorallocatealpha</span></span><span>(</span><span><span class="hljs-variable">$img</span></span><span>, </span><span><span class="hljs-number">255</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">75</span></span><span>);
</span><span><span class="hljs-comment">// 長方形を描きます</span></span><span>
</span><span><span class="hljs-title function_ invoke__">imagefilledrectangle</span></span><span>(</span><span><span class="hljs-variable">$img</span></span><span>, </span><span><span class="hljs-number">50</span></span><span>, </span><span><span class="hljs-number">50</span></span><span>, </span><span><span class="hljs-number">150</span></span><span>, </span><span><span class="hljs-number">150</span></span><span>, </span><span><span class="hljs-variable">$red</span></span><span>);
</span><span><span class="hljs-comment">// 出力 PNG</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">$img</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">imagedestroy</span></span><span>(</span><span><span class="hljs-variable">$img</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>上記のコードを実行した後、ブラウザは透明な背景と中央に半透明の赤い長方形を備えたPNG画像を表示します。
ImageCreateTrueColor()を使用して高品質のキャンバスを作成し、 Imagealphableending()およびImageAvealpha()と組み合わせて、開発者は画像の半透明の効果を簡単に達成できます。この手法は、透かし、特殊効果画像、またはUI要素を生成する場合に特に役立ちます。これら2つの機能の組み合わせをマスターすると、PHPの画像処理がより柔軟で強力になります。