現在の位置: ホーム> 最新記事一覧> ImageLipse()を使用してサークルを描くときに、イメージャアニ症機能を使用して抗ALIAS効果を達成する方法は?

ImageLipse()を使用してサークルを描くときに、イメージャアニ症機能を使用して抗ALIAS効果を達成する方法は?

M66 2025-06-23

実装方法を導入する前に、最初に2つの重要な機能を理解します。

  • ImageEllipse(Resource $ Image、int $ cx、int $ cy、int $ width、int $ height、int $ color) :画像に楕円を描きます。

  • ImageAntialias(Resource $ image、bool $ enabled) :アンチアリアシングをオンまたはオフにします。

ただし、 ImageAntialias()はImageLine()ImageChangle()などの関数を使用して描画されたグラフィックスでのみ機能し、 ImageLipse()で有効になっていないことに注意してください。これは、多くの開発者が見落とす傾向があるピットです。

それでは、サークルを描くときにアンチエイリアシングを達成する方法は?

戦略を変更したり、より高い解像度を使用してグラフィックを描画したり、画像を縮小したり、アンチエイリアシング効果を手動でシミュレートする必要があります。一般的なアプローチは次のとおりです。高解像度の描画 +スケーリング。これは、追加のグラフィックスライブラリの助けを借りずにアンチエイリアスを実現する簡単な方法です。

サンプルコード

<?php
// スケーリングマルチを設定します,例えば3時々解決策を描きます
$scale = 3;
$width = 200;
$height = 200;

$scaledWidth = $width * $scale;
$scaledHeight = $height * $scale;

// 大きな画像リソースを作成します
$largeImage = imagecreatetruecolor($scaledWidth, $scaledHeight);
imageantialias($largeImage, true);

// 背景色を白に設定して埋めます
$white = imagecolorallocate($largeImage, 255, 255, 255);
imagefill($largeImage, 0, 0, $white);

// 円の色を設定します
$circleColor = imagecolorallocate($largeImage, 0, 0, 255);

// 楕円を描きます(実際、それは円です)
$cx = $scaledWidth / 2;
$cy = $scaledHeight / 2;
$radius = min($scaledWidth, $scaledHeight) * 0.4;
imageellipse($largeImage, $cx, $cy, $radius * 2, $radius * 2, $circleColor);

// ターゲットの小さな画像リソースを作成します
$finalImage = imagecreatetruecolor($width, $height);

// アンチアリアシングのために画像を縮小します
imagecopyresampled($finalImage, $largeImage, 0, 0, 0, 0, $width, $height, $scaledWidth, $scaledHeight);

// 出力画像
header('Content-Type: image/png');
imagepng($finalImage);

// メモリをきれいにします
imagedestroy($largeImage);
imagedestroy($finalImage);
?>

効果と指示

この例では、最初に元のサイズの3倍を使用して大きな円を描画し、次にimageCopyResampled()関数を使用して、画像をターゲットサイズに削減します。このプロセスは、アンチエイリアシングをシミュレートするのと同等であり、出力画像のエッジはよりスムーズに見えます。

ImageAntialias()はImageEllipse()には有効ではありませんが、スケーリング戦略を通じてこの制限をバイパスし、高品質の画像を生成することができます。画像処理の要件が高い場合は、ImageMagickなどのプロフェッショナルな画像処理ライブラリの使用を検討する方が適切です。

拡張提案

出力ブラウザーの代わりに画像をサーバーに保存する場合は、次の方法を使用できます。

 imagepng($finalImage, '/path/to/save/image.png');

またはアクセスリンクを生成します。

 $filename = 'https://m66.net/images/circle.png';
imagepng($finalImage, '/var/www/m66.net/images/circle.png');

M66.NETに対応するパスに書き込みアクセス許可があることを確認してください。

このスケーリング方法は、ポリゴン、フリーカーブなどの他のフィギュアを描画するのにも適しています。これは、GDライブラリで一般的に使用されているアンチエリアス手法です。