PHPのGDライブラリでは、 ImageOpenPolygon()関数を使用して、画像に開いたポリゴンを描画します。 ImagePolygon() (閉じたポリゴン)と比較して、 ImageOpenPolygon()は開始点とエンドポイントを自動的に視覚的に接続しません。一般的な開発要件は、透明な背景を持つ画像にさまざまな形状を描くことです。それで、 ImageOpenPolygon()は、透明な背景をサポートする画像で適切に動作できますか?この記事では、これを詳細に分析します。
ImageOpenPolygon()の基本的な構文は次のとおりです。
bool imageopenpolygon(
GdImage $image,
array $points,
int $num_points,
int $color
)
$画像: ImageCreateTrueColor()または同様の関数によって作成されたGD画像リソース。
$ポイント:ポイントの座標の配列。
$ num_points :ポイント数。
$色:線を描くために使用される色(画像に割り当てられた色識別子)。
注:この機能を使用するには、PHPのGD拡張機能を有効にする必要があります。
透明な背景をサポートするには、通常、次の手順に従う必要があります。
imageCreatetrueColor()を使用して、真の色の画像を作成します。
Alpha Channel Savingを有効にします( ImagesAvealpha()を使用)。
完全に透明な背景色を入力します。
例:
<?php
// 透明な背景を持つ画像を作成します
$width = 400;
$height = 300;
$image = imagecreatetruecolor($width, $height);
// 完全なものを保存できますalphaチャネル情報
imagesavealpha($image, true);
// 透明な背景で満たされています
$transparent = imagecolorallocatealpha($image, 0, 0, 0, 127);
imagefill($image, 0, 0, $transparent);
// ポリゴンポイントを定義します
$points = [
50, 50,
300, 100,
250, 250,
100, 200
];
// 描画色を定義します
$color = imagecolorallocate($image, 255, 0, 0); // 赤
// 開いたポリゴンを描きます
imageopenpolygon($image, $points, count($points) / 2, $color);
// ブラウザへの出力
header('Content-Type: image/png');
imagepng($image);
// リソースを破壊します
imagedestroy($image);
?>
上記のコードを使用すると、透明な背景に赤い開いたポリゴンを描画できます。
GDライブラリの基礎となる実装から、 ImageOpenPolygon()は本質的に一連のラインセグメントを描画するだけであり、画像の背景透明性属性に影響しません。したがって、透明な背景画像に対する互換性は良好であり、これは以下に反映されています。
アルファチャネルは破壊されません。画像が正しく有効になっている場合、 ImageOpenPolygon()が描画された後、画像は透明な背景を保持します。
色の処理は正常です:割り当てられた描画色が透明に設定されていない限り(つまり、透明度はImageColorallocatealpha()を使用して指定されていません)、描かれた線は不透明ですが、背景は透明のままです。
パフォーマンスへの影響は小さいです。閉じたポリゴンと比較して、オープンポリゴンで1つのラインセグメントのみが描かれており、パフォーマンスに大きな違いはありません。
ただし、2つのポイントに注意する必要があります。
非真実のカラー画像が使用されている場合( ImageCreate()によって作成されたパレット画像など)、透明性処理が不完全である可能性があり、背景色が完全に透明ではありません。
JPEG形式にエクスポートすると、透明な部分は黒または白に埋められます。 PNG形式を使用して、透明な背景画像を保存することをお勧めします。
ImageOpenPolygon()は、透明な背景を持つ画像に完全に形状を描くことができ、適切な互換性を持ち、元の透明効果を破壊しません。アルファチャネルを正しく有効にして保存するように注意してください。
透明な背景を持つ複雑なグラフィックを動的に生成したり、Webページに表示したりするなど、さらに進む必要がある場合は、生成されたPNG画像をURLに渡すことができます。