現在の位置: ホーム> 最新記事一覧> さまざまなPHPバージョンでのImageOpenPolygon()のパフォーマンスの違い

さまざまなPHPバージョンでのImageOpenPolygon()のパフォーマンスの違い

M66 2025-05-17

PHPでは、 ImageOpenPolygon()は、開いたポリゴンを描画するために使用される関数です(つまり、開始点とエンドポイントラインセグメントを自動的に接続しないポリゴン)。グラフィック描画、特にカスタムラインの形を扱うときに非常に便利です。ただし、PHPの異なるバージョンでこの関数のサポートとパフォーマンスには、実際にいくつかの違いがあります。以下を詳しく見てみましょう。

1。ImageOpenPolygon ()の導入

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以降では、上記のコードは正常に実行され、開いたクワッドを描画できます。

2。パラメーターの変更と仕様

ImageOpenPolygon()の基本的なパラメーター定義は、PHP 7.2以降修正されており、後続のバージョンは変更されていません。そのパラメーターは次のとおりです。

 bool imageopenpolygon(
    GdImage $image,
    array $points,
    int $num_points,
    int $color
)
  • $画像ImageCreatetrueColor()または同様の関数によって作成された画像リソース。

  • $ポイント:一連のxおよびy座標を含む1次元配列。

  • $ num_points :頂点の数(配列要素の数ではなく)。

  • $ colormageColorAllocate()によって作成されたラインカラー。

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);

3。値の挙動を返します

すべてのサポートされているバージョン(PHP 7.2+)で、 ImageOpenPolygon()がブール値を返します。

  • 成功trueを返します

  • 失敗falseを返します

PHP 8.0の後、無効なパラメーターが渡された場合(非Gdimageタイプなど)、 typeRror例外はfalseを返すことなく直接スローされることに注意してください。

4。エラー処理

  • 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";
}

5。実際のケースデモンストレーション

完全な例を示すには、 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+環境では、タイプの厳格性と例外処理の問題に注意を払う必要があります。