PHPでは、 ImageOpenPolygon()は、開いたポリゴンを描画するために使用される関数です(つまり、開始点とエンドポイントラインセグメントを自動的に接続しないポリゴン)。グラフィック描画、特にカスタムラインの形を扱うときに非常に便利です。ただし、PHPの異なるバージョンでこの関数のサポートとパフォーマンスには、実際にいくつかの違いがあります。以下を詳しく見てみましょう。
ImageOpenPolygon()関数は、PHPバージョン7.2.0で導入されました。この関数は以前のバージョン(PHP 5.xまたはPHP 7.0/7.1など)では使用できなかったため、古いバージョンで使用すると、致命的なエラーが直接つながります。
// PHP 7.1 以前のバージョンを実行します
$im = imagecreatetruecolor(200, 200);
$points = [50, 50, 150, 50, 150, 150, 50, 150];
// これにより、致命的なエラーが発生します,関数が存在しないためです
imageopenpolygon($im, $points, 4, imagecolorallocate($im, 255, 0, 0));
PHP 7.2以降では、上記のコードは正常に実行され、開いたクワッドを描画できます。
ImageOpenPolygon()の基本的なパラメーター定義は、PHP 7.2以降修正されており、後続のバージョンは変更されていません。そのパラメーターは次のとおりです。
bool imageopenpolygon(
GdImage $image,
array $points,
int $num_points,
int $color
)
$画像: ImageCreatetrueColor()または同様の関数によって作成された画像リソース。
$ポイント:一連のxおよびy座標を含む1次元配列。
$ num_points :頂点の数(配列要素の数ではなく)。
$ color : mageColorAllocate()によって作成されたラインカラー。
PHP 8.0の後、全体的なタイプシステムの強化により、リソースタイプリソース(リソース)は正式にGDIMAGEオブジェクトに変換されました。したがって、PHP 8.0+では、 $画像がGDIMAGEインスタンスである必要があることが厳密に必要です。そうしないと、TypeRrorがトリガーされます。
例(PHP 8.0+):
$im = imagecreatetruecolor(200, 200);
$red = imagecolorallocate($im, 255, 0, 0);
$points = [50, 50, 150, 50, 150, 150, 50, 150];
imageopenpolygon($im, $points, 4, $red);
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);
すべてのサポートされているバージョン(PHP 7.2+)で、 ImageOpenPolygon()がブール値を返します。
成功: trueを返します
失敗: falseを返します
PHP 8.0の後、無効なパラメーターが渡された場合(非Gdimageタイプなど)、 typeRror例外はfalseを返すことなく直接スローされることに注意してください。
PHP 7.2-7.4 :エラーパラメータータイプで渡され、通常はfalseを返し、e_warningをトリガーします。
PHP 8.0+ :エラーパラメータータイプは、TypeRror例外を直接スローしますが、単なる警告ではありません。
例(エラー処理デモンストレーション):
try {
$invalidImage = 'not a resource';
$points = [10, 10, 20, 20, 30, 10];
imageopenpolygon($invalidImage, $points, 3, 0xFF0000);
} catch (TypeError $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
完全な例を示すには、 ImageOpenPolygon()を使用して、単純な開いたポリゴンを描画し、画像をブラウザに出力します。
<?php
$im = imagecreatetruecolor(300, 300);
$background = imagecolorallocate($im, 255, 255, 255); // 白い背景
$lineColor = imagecolorallocate($im, 0, 0, 255); // 青い線
$points = [
50, 50,
250, 50,
250, 250,
50, 250
];
imagefill($im, 0, 0, $background);
imageopenpolygon($im, $points, 4, $lineColor);
// ブラウザへの出力
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);
?>
ブラウザは、このPHPファイルにアクセスします。
https://m66.net/draw_polygon.php
青い線で描かれた開いた長方形の箱を見ることができます。
PHPバージョン | サポート | 述べる |
---|---|---|
<7.2 | サポートされていないため、通話は直接エラーです | |
7.2-7.4 | サポートされた緩いパラメータータイプ | リソースはリソースタイプです |
8.0+ | サポートされた厳密なパラメーター要件 | gdimageタイプ、エラーは例外を直接スローします |
したがって、開発では、PHP 7.1以下と互換性がある必要がある場合は、 ImageOpenPolygon()の使用を避けるか、コードをバージョンチェックしないでください。 PHP 8.0+環境では、タイプの厳格性と例外処理の問題に注意を払う必要があります。