画像処理にPHPを使用する場合、多くの開発者はImageAntialias()関数を使用して画像エッジを滑らかにし、描画品質を向上させます。ただし、この関数が呼び出されたとしても、画像出力はまだジャグに表示されているように見えますが、これにはアンチエイリアシング効果がないようです。それで、これはGDライブラリのバージョンに関連していますか?この記事では、この問題を詳細に分析します。
ImageAntialias()は、画像のアンチアライアスを有効またはオフにするために、PHPが提供するGDライブラリ関数の1つです。構文は次のとおりです。
bool imageantialias(GdImage $image, bool $enabled)
$ enabledがtrueの場合、アンチエイリアシング機能が有効になります。
この関数は通常、ラインやフィギュアの滑らかな描画に使用されます。特に、絵の品質を大幅に向上させることができるスラッシュや円を描く場合。例えば:
$img = imagecreatetruecolor(200, 200);
$white = imagecolorallocate($img, 255, 255, 255);
$black = imagecolorallocate($img, 0, 0, 0);
imagefill($img, 0, 0, $white);
imageantialias($img, true);
imageline($img, 0, 0, 199, 199, $black);
imagepng($img, 'output.png');
imagedestroy($img);
最も一般的な理由は、GDライブラリバージョンが機能をサポートしていないか、完全にサポートしていないことです。具体的には:
PHPのいくつかの古いバージョン(PHP 5.3以下など)では、GDライブラリのImageAntialias()に対するサポートは安定していません。
一部のシステムでは、PHPをコンパイルするときに完全なGDサポートを有効にしない場合があります。または、GDライブラリは簡素化されたバージョンを使用します(たとえば、LIBGDは使用されません)。
PHP 8.0以降では、 ImageAntialias()関数は一部のシステムでは廃止され、完全に無効であり、アンチエイリアス戦略の代わりに画像スケーリングを使用することをお勧めします。
したがって、GDバージョンを確認することは非常に重要です。次の方法で、現在のPHPでGDの特定の情報を表示できます。
<?php
phpinfo();
ページの「GDサポート」セクションを探して、フリー型、libpng、libjpeg、その他の拡張機能が有効かどうかを確認します。
すべての画像タイプがアンチエイリアシング効果を見ることができるわけではありません。例えば:
ImageCreate()で作成された画像は8ビットパレット画像であり、アンチエイリアスをサポートしていません。
ImageAntialias ()は、ImageCreateTrueColor()によって作成された真のカラー画像がサポートされている場合にのみサポートされます。
ImageCreatetrueColor()を使用してください。そうしないと、関数呼び出しはエラーを報告しませんが、有効になりません。
ImageAntialias()は、すべての描画関数に対して機能しません。主に次の機能に対して有効です。
ImageLlipse()
ImageCopyResampled()などの関数の場合、アンチアリアーシングは、イメージャンティアリア()ではなく、スケーリングアルゴリズムに依存します。したがって、画像をスケーリングするときにアンチアリアーシングが無効であることがわかった場合は、次のような代替案を考慮する必要があります。
imagecopyresampled($dstImg, $srcImg, 0, 0, 0, 0, $newWidth, $newHeight, $srcWidth, $srcHeight);
これは、ズーム時に画質を維持するための推奨される方法です。
GDライブラリが次のコードを実行してimageantialias()をサポートしているかどうかを確認してください。
<?php
if (function_exists('imageantialias')) {
echo 'imageantialias() 利用可能';
} else {
echo 'imageantialias() 不利用可能';
}
ImageAntialias()が無効である場合、同様の防止効果を達成するために、次の方法を検討できます。
より大きな画像を作成します。
グラフィックを描画します。
画像をターゲットサイズに減らします。
例:
$large = imagecreatetruecolor(400, 400);
$white = imagecolorallocate($large, 255, 255, 255);
$black = imagecolorallocate($large, 0, 0, 0);
imagefill($large, 0, 0, $white);
imageellipse($large, 200, 200, 300, 300, $black);
$small = imagecreatetruecolor(100, 100);
imagecopyresampled($small, $large, 0, 0, 0, 0, 100, 100, 400, 400);
imagepng($small, 'https://m66.net/output.png');
imagedestroy($large);
imagedestroy($small);
この方法では、画像()に依存することなく、より滑らかな描画効果を実現できます。
ImageAntialias()関数は、GDライブラリの古いバージョンまたは互換性のない画像タイプが原因である可能性が高い環境では無効です。 PHP 8.0+プロジェクトでは、 Anti -ALIASを達成するために、画像スケーリングテクノロジーを使用して画像スケーリングテクノロジーを使用することをお勧めします。