PHPのImageOpenPolygon()関数を使用して開いたポリゴンを描画すると、 Falseが返される状況に遭遇することがあります。これは、多くの場合、パラメーターの通過エラー、画像リソースの問題、またはコールメソッドの問題を意味します。この記事は、一般的な間違いから始まり、可能な原因と解決策を徐々に分析して、問題を迅速に見つけて修正するのに役立ちます。
ImageOpenPolygon()は、GDグラフィックス処理ライブラリの一部です。 GDライブラリがサーバー環境に正しくインストールされていない場合、GD機能を呼び出すことは失敗します。次のコードで検出できます。
<?php
if (function_exists('imageopenpolygon')) {
echo "GD ライブラリがインストールされています,とサポート imageopenpolygon() 関数。";
} else {
echo "GD ライブラリはインストールされていないか、サポートされていません imageopenpolygon() 関数,お会計お願いします PHP 構成。";
}
?>
プロンプトがインストールされていない場合は、GDモジュールをサーバーにインストールする必要があります。たとえば、:
sudo apt install php-gd
インストールが完了したら、サーバーを再起動することを忘れないでください。
ImageOpenPolygon()の最初のパラメーターは、有効な画像リソースでなければなりません。画像リソースを作成する標準的な例は次のとおりです。
<?php
$image = imagecreatetruecolor(400, 300);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
?>
$画像がImageCreateTrueColor() 、 ImageCreateFromJpeg()などの関数によって正しく生成された画像リソースではない場合、 ImageOpenPolygon()はfalseを直接返します。
ImageOpenPolygon()の2番目のパラメーターは、 [x1、y1、x2、y2、x3、y3、]フォームの1次元座標配列を渡す必要があります。配列が正しくない場合、関数も失敗します。
エラー例(2次元配列):
$points = [
[10, 10],
[100, 50],
[50, 150]
];
imageopenpolygon($image, $points, 3, $color); // 間違った文章
正しい例(1次元配列):
$points = [10, 10, 100, 50, 50, 150];
imageopenpolygon($image, $points, 3, $color);
配列要素の数ではなく、頂点の数を表す3番目のパラメーターに特に注意してください。頂点の数は(count($ points) / 2)でなければなりません。
ポリゴンを描画するときは、通常ImageColorAllocate()によって生成される色インデックスを指定する必要があります。例えば:
$color = imagecolorallocate($image, 0, 0, 0); // 黒
初期化された色の値を直接渡すと、図面が失敗します。
上記の予防措置に基づいて、以下に完全かつ運用上の例を示します。
<?php
// 空白の画像を作成します
$image = imagecreatetruecolor(400, 300);
// 色を割り当てます
$white = imagecolorallocate($image, 255, 255, 255);
$black = imagecolorallocate($image, 0, 0, 0);
// 背景を埋めます
imagefill($image, 0, 0, $white);
// 頂点を定義します
$points = [50, 50, 150, 50, 100, 150];
// 開いたポリゴンを描きます
if (imageopenpolygon($image, $points, 3, $black)) {
echo "うまく描画します!";
} else {
echo "描画は失敗しました,お会計お願いします参数!";
}
// ブラウザに画像を出力します
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
?>
実際の効果を確認したい場合は、上記のコードをdraw_polygon.phpとして保存してからサーバーにアクセスできます。たとえば
https://m66.net/draw_polygon.php
PHPバージョンがサポートされていることを確認してください(PHP 7.2+のGD拡張には、デフォルトでImageOpenPolygon()が含まれています)。
画像出力の前に、正しいコンテンツタイプのヘッダーを必ず設定してください。
画像リソースを使用した後、 Imagedestroy()を使用してメモリを解放することを忘れないでください。
ImageOpenPolygon()がfalseを返すと、通常、パラメーターの設定エラーまたは画像リソースの問題によって引き起こされます。上記の検査手順に続いて、問題のほぼ99%を解決できます。