PHPの画像処理中に、画像拡張機能()関数を使用して、アンチエアシング効果を有効または無効にし、画像のラインまたはグラフィックスの滑らかさを改善します。この関数は、主に線、アーク、長方形、その他の図を描画するときに使用されます。エッジを曖昧にすることにより、画像はより滑らかで自然に見えます。しかし、それはまた、画像リソース全体に影響を与えるためです。その影響範囲が開発において重要な問題になっていることです。
この記事では、イメージャンティアリアス()の範囲を制限し、不必要な部分への影響を回避するためのいくつかの一般的な方法を紹介します。
$img = imagecreatetruecolor(200, 200);
imageantialias($img, true);
$black = imagecolorallocate($img, 0, 0, 0);
imageline($img, 0, 0, 200, 200, $black);
上記のように、 ImageAntialias()は画像リソース$ IMG全体で有効になり、一度設定すると、そのリソースの後続の描画操作のためにアンチエイリアスが有効になります。
ImageAntialias()は、GDイメージリソース全体に作用します。つまり、リソースでアンチエイリアスが有効になると、そのリソースのすべてのグラフィックスの描画操作が影響を受けます。 GDライブラリは、「特定の領域のアンチエイリアシングのみを有効にする」ことをサポートしていないため、特定の部分のみに作用するように直接制御することはできません。
GDのImageAntialias()自体は局所的な制御をサポートしていませんが、「局所的な反放射」効果制御を達成するための間接的な方法がいくつかあります。
ImageAntialias()を別の小さな画像リソースで有効にし、図面を終了した後、メイン画像に戻すことができます。
$main = imagecreatetruecolor(400, 400);
$sub = imagecreatetruecolor(100, 100);
imageantialias($sub, true);
$red = imagecolorallocate($sub, 255, 0, 0);
imagefilledellipse($sub, 50, 50, 80, 80, $red);
imagecopy($main, $sub, 150, 150, 0, 0, 100, 100);
この方法は、メインイメージ$メインの他の描画操作に影響を与えることなく、 $サブサブイメージのみに影響を与えるアンチエイリアシングを効果的に「ローカライズ」することができます。
方法1と同様ですが、複数の複雑な層を組み合わせるのに適しています。例えば:
$background = imagecreatetruecolor(400, 400);
$foreground = imagecreatetruecolor(400, 400);
imageantialias($foreground, true);
$white = imagecolorallocate($background, 255, 255, 255);
$blue = imagecolorallocate($foreground, 0, 0, 255);
imagefill($background, 0, 0, $white);
imagefilledpolygon($foreground, [100,100, 300,100, 200,300], 3, $blue);
imagecopy($background, $foreground, 0, 0, 0, 0, 400, 400);
背景はデフォルトのままである間、アンチエイリアスを前面に有効にすることができ、最終的なマージ時にうまく機能します。
これは画像の直接制御ではありませんが、場合によってはフィルターを介して滑らかにすることができます。
$img = imagecreatetruecolor(200, 200);
// ... グラフを描きます ...
imagefilter($img, IMG_FILTER_GAUSSIAN_BLUR);
このアプローチは「後期ぼかし」であり、実際のアンチアンチエリアスを置き換えることはできませんが、一部の様式化された画像で同様の視覚効果を達成する可能性があることに注意してください。
ImageAntialias()は、画像のローカルエリアで直接有効または無効にすることができないグローバルな設定です。ただし、次の方法により、その範囲のアクションの範囲をある程度「制限」することができます。
グラフィックを複数のサブイメージリソースに分割し、サブイメージでアンチエイリアシングを可能にします。
画像合成を使用したローカル処理。
画像フィルターと組み合わせて、必要に応じて視覚的なスムージングが実行されます。
これらの方法は、GDのアンチエアシングメカニズムを根本的に変更することはできませんが、画質と効率の両方を必要とするほとんどの開発シナリオに対処するのに十分です。