ruby-libgd は、すべての描画プリミティブに対して トゥルーカラー対応・アルファ対応のアンチエイリアス をサポートしています。 これにより、Ruby で滑らかな線、曲線、レイヤー表現、読みやすいテキストを描画できます。
アンチエイリアスは次の要素に適用されます:
内部的には、GD の トゥルーカラー + アルファブレンディング パイプラインを使用しています。
img = GD::Image.new(900, 600)
img.antialias = true
有効にすると、すべての描画操作が 滑らかなエッジとアルファブレンディング でレンダリングされます。
ruby-libgd では色は配列として表現されます:
[r, g, b] # RGB
[r, g, b, a] # RGBA(a = 0..255)
ヘルパーメソッドも用意されています:
GD::Color.rgb(255, 0, 0)
GD::Color.rgba(255, 0, 0, 120)
これらの値は内部的に GD の トゥルーカラー + アルファ形式 に変換されます。
この例では、半透明の重なり、滑らかな輪郭線、斜めのラインを描画します。
require "gd"
img = GD::Image.new(900, 600)
img.antialias = true
bg = GD::Color.rgb(20, 22, 30)
grid = GD::Color.rgba(255,255,255,40)
blue = GD::Color.rgba(80,160,255,180)
red = GD::Color.rgba(255,80,80,200)
green = GD::Color.rgba(80,200,120,180)
white = GD::Color.rgb(255,255,255)
img.filled_rectangle(0, 0, 899, 599, bg)
(0..900).step(50) { |x| img.line(x, 0, x, 599, grid) }
(0..600).step(50) { |y| img.line(0, y, 899, y, grid) }
img.filled_ellipse(350, 300, 350, 240, blue)
img.filled_ellipse(500, 280, 350, 240, green)
img.filled_ellipse(430, 360, 350, 240, red)
img.ellipse(430, 360, 350, 240, white)
img.save("antialias_demo.png")
アンチエイリアスは次のために不可欠です:
このレンダリングパイプラインは libgd-gis の地図描画 にもそのまま使用されています。
