画像処理にPHPを使用する場合、 ImageAntialias()関数は、画像エッジの滑らかさを改善するためにしばしば使用され、それによってジャギング効果が低下します。ただし、多くの開発者は、実際のアプリケーションで、この関数が予想どおりに有効になっていないことを発見しており、画像には明らかにギザギザのエッジがあります。それで、 ImageAntialias()が無効になる理由は何ですか?アンチアリアシングを正しく実現する方法は?この記事では、この問題の詳細な分析を実施し、実行可能なソリューションを提案します。
ImageAntialias(Resource $ image、bool $ enabled):boolは、GDライブラリが提供する関数であり、画像のアンチエリアを有効または無効にします。この機能は、主に線や円、その他のグラフィック要素を描くときに有効になります。画像のスケーリングや変換ではなく、画像の「描画」段階に適しています。
キーポイント:
グラフィック( ImageLine()やImageArc( )などの描画にのみ有効です。
画像スケーリング( ImagesScale() 、 ImageCopyResampled( )などなどが無効です。
この関数は、オンになった後の後続の図面関数にのみ有効になります。
アンチエイリアシング関数は有効になりません<br> 多くの開発者は、ImageAntialias()を呼び出すことはすべてのグラフィカル操作に1回だけ有効になると誤って信じていますが、描画前にtrueを呼び出す場合にのみ有効になります。
$img = imagecreatetruecolor(200, 200);
imageantialias($img, true); // 描く前に配置する必要があります
imageline($img, 0, 0, 200, 200, $black);
ベクトル図面<br>ではなく、ビットマップ操作を使用します ImageLine()などの関数を描画する代わりに、画像のコピー、スケーリング、その他の操作を実行するだけの場合、 ImageAntialias()は効果を生成しません。例えば:
// 既存の画像をスケーリングする場合、アンチエイリアスはトリガーされません
imagecopyresized($dst, $src, 0, 0, 0, 0, 100, 100, 200, 200);
代替: ImageCopyResampled()を使用してスケーリングします。
GDライブラリバージョンの問題<br> 一部の古いPHPまたはGDライブラリバージョンでは、 ImageAntialias()関数の実装が不十分であり、コール後に効果のないバグさえあります。 PHPバージョン7.4以上を使用し、GDがFreetypeをサポートしていることを確認することをお勧めします。
不正な画像モード<br> アンチエイリアシング効果は、 ImageCreate()で作成された低品質の画像よりも、ImageCreateTrueColor()で作成された画像により適しています。低品質の画像は、フルカラーの深さをサポートせず、アンチエイリアシングパフォーマンスに影響します。
// 推奨使用 true color 画像
$img = imagecreatetruecolor(300, 300);
$img = imagecreatetruecolor(200, 200);
$black = imagecolorallocate($img, 0, 0, 0);
imageantialias($img, true); // アンチアリアシングをオンにします
imageline($img, 10, 10, 190, 190, $black);
imagepng($img, 'https://m66.net/output/line.png');
imagedestroy($img);
$src = imagecreatefrompng('https://m66.net/input/image.png');
$dst = imagecreatetruecolor(100, 100);
imagecopyresampled($dst, $src, 0, 0, 0, 0, 100, 100, imagesx($src), imagesy($src));
imagepng($dst, 'https://m66.net/output/resampled.png');
imagedestroy($src);
imagedestroy($dst);
結局のところ、GDライブラリのアンチエイリアシング機能は限られています。高品質の画像処理が必要な場合は、次の選択肢を検討できます。
Imagick(ImageMagickのPHP拡張) :より豊富な画像処理機能と高品質の防止アルゴリズムをサポートします。
カイロ:高品質の図面をサポートする2Dグラフィックライブラリ。
サードパーティのサービス:たとえば、画像の生成とアンチイアシングの最適化は、画像処理APIを使用して実行されます。
ImageAntialias()は、実際に画像のギャングの問題を改善できますが、適用可能なシナリオとコールオーダーに正しく使用されている場合のみです。動作しないことがわかった場合、画像関数を悪用したり、GD画像タイプを無視したり、その機能について誤解しているためです。 ImageCopyResampled()を組み合わせ、真のカラー画像を使用し、GDライブラリを更新して最良の結果を得ることをお勧めします。より高い画質を追求する開発プロジェクトについては、より専門的な画像処理ツールの導入を検討することもできます。