通常 GD を用いて円や直線を描画した場合、全くアンチエイリアス処理がなされないため、縁がギザギザしているように見えてしまいます。(ジャギー)
精度の高い軽量なアンチエイリアス処理(ジャギーを軽減する処理)を求めるなら何らかのアルゴリズムを使った計算を行うべきですが、今回は単純に、あらかじめ大きな画像として描画しておいて、それを表示サイズまで縮小する方法でジャギーを軽減してみます。
2倍
3倍
二倍サイズで描画したものを表示サイズに縮小するだけでかなりジャギーは目立たなくなります。
三倍ならほとんど気になりません。
GD のリサイズではピクセルの補間が行われるため拡大・縮小時には滑らかに処理されます。
今回の方法はその性質を利用したものです。
本来 GD には imageantialias() という専用の関数があるのですが、環境や対象によっては機能しないことが多いので、現時点ではこの手法も役に立つと思います。
・検証用サンプル
<?php $canvas_size = 120; $circle_size = 100; $scale = 3; $image = imagecreatetruecolor($canvas_size, $canvas_size); $circle = imagecreatetruecolor($canvas_size * $scale, $canvas_size * $scale); $color = imagecolorallocate( $circle, 255, 255, 255 ); imagefilledellipse($circle, $canvas_size * $scale / 2, $canvas_size * $scale / 2, $circle_size * $scale, $circle_size * $scale, $color); imagecopyresampled($image, $circle, 0, 0, 0, 0, $canvas_size, $canvas_size, $canvas_size * $scale, $canvas_size * $scale); header("Content-type: image/png"); imagepng($image); imagedestroy($image); imagedestroy($circle);
Similar Posts:
- [PHP]マスク画像で写真を好きな形に切り抜く(クリッピングマスク)
- [PHP]GDで作った画像をファイル化せずに直接<img>タグで表示する
- [PHP]複数の画像をランダムに敷き詰めて一枚の画像に合成
- [PHP]円グラフを表示する(GD)
- [PHP]レーダーチャート(クモの巣グラフ)をGDで描画する
- [PHP]GDで折れ線グラフを描画する(改訂版)
- [PHP]GDを使った棒グラフの描画
- [PHP]GDでアンチエイリアスのかかった綺麗な楕円を描く