PHPでGDライブラリを使用して描画する場合、通常、アルファチャネルを使用してアルファチャネルと併せて処理する必要があります。この記事では、Alpha Gradientを使用したImageOpenPolygon()関数を介して滑らかで半透明のポリゴン効果を描画する方法について説明します。
ImageOpenPolygon()は、PHP GDライブラリの描画関数であり、キャンバスに開いたポリゴンを描画するために使用されます。 ImagePolygon() (閉じるポリゴン)とは異なり、 ImageOpenPolygon()はポリゴンの線のみを描画し、開始点とエンドポイントを自動的に閉じません。
関数の基本的な構文は次のとおりです。
bool imageopenpolygon(GdImage $image, array $points, int $num_points, int $color)
$画像:ターゲット画像リソース。
$ポイント: [x1、y1、x2、y2、...、xn、yn]の形式で、ポイント座標を含む配列。
$ num_points :ポイント数。
$色:描画に使用される色。
GDライブラリはRGBA形式の色をサポートしており、色が透明性を持つことができます(アルファ)。アルファ値を制御することにより、勾配の透明効果を達成できます。
Imageopenpolygon()を使用して半透明勾配でポリゴンを描く方法を示す実用的な例を示します。
<?php
// キャンバスを作成します
$width = 400;
$height = 400;
$image = imagecreatetruecolor($width, $height);
// 有効にする alpha チャネル保存情報
imagesavealpha($image, true);
// 背景を透明な色で満たします
$transparent = imagecolorallocatealpha($image, 0, 0, 0, 127);
imagefill($image, 0, 0, $transparent);
// ポリゴンのポイントを定義します
$points = [
50, 50,
350, 50,
350, 350,
50, 350
];
// 異なる透明性でポリゴンラインの描画を開始します
$steps = 10;
for ($i = 0; $i <= $steps; $i++) {
$alpha = (int)($i * (127 / $steps)); // alpha から0(不透明)到着127(完全に透明)
$color = imagecolorallocatealpha($image, 255, 0, 0, $alpha); // 赤,異なる透明性で
// スケーリングポイントを計算します
$scaledPoints = [];
foreach ($points as $index => $coord) {
$offset = 5 * $i;
if ($index % 2 == 0) { // x 座標
$scaledPoints[] = $coord + $offset;
} else { // y 座標
$scaledPoints[] = $coord + $offset;
}
}
imageopenpolygon($image, $scaledPoints, count($scaledPoints) / 2, $color);
}
// 出力画像
header('Content-Type: image/png');
imagepng($image);
// リソースを破壊します
imagedestroy($image);
?>
このコードはループをループし、ポリゴンをわずかに拡張し、一度に透明性を低下させるため、中心から外側に分岐する半透明な勾配が達成されます。 ImageOpenPolygon()は開いたポリゴンを描くため、中央には固い塗りつぶしはなく、非常に繊細なグラデーションラインの感触を維持します。
最終的な効果を確認したい場合は、上記のコードを.phpファイルとして保存して、たとえばサーバーにアップロードできます。
https://m66.net/demo/transparent_polygon.php
(PHP環境でサーバーを構成し、GDライブラリが有効になっていることを確認することを忘れないでください。)
ImagesAvealpha($ image、true)を呼び出す必要があります。そうしないと、出力時に透過情報は保存されません。
ImageColorallocatealpha()の最後のパラメーターは、0(完全に不透明)から127(完全に透明)の範囲のアルファ値です。
PHP 8.0から、GDライブラリのオブジェクトモデルが変更されたため、バージョンの違いに注意してください。
Alpha Gradientを使用してImageOpenPolygon()を使用すると、実際に半透明およびマルチレベルのライン描画効果を非常に簡単に実現できます。このテクノロジーは、クールなUIコンポーネントを描くだけでなく、動的な背景、特殊効果グラフィックスなどを生成するためにも使用できます。これは非常に実用的です。