def text(text_string, opts={})
opts = HashWithCssStyleKeys[opts]
draw = Magick::Draw.new
draw.gravity = Magick::CenterGravity
draw.text_antialias = true
font_size = (opts[:font_size] || 12).to_i
s = scale_factor_for(font_size)
draw.pointsize = font_size * s
draw.font = opts[:font] if opts[:font]
draw.font_family = opts[:font_family] if opts[:font_family]
draw.fill = opts[:color] if opts[:color]
draw.stroke = opts[:stroke_color] if opts[:stroke_color]
draw.font_style = FONT_STYLES[opts[:font_style]] if opts[:font_style]
draw.font_stretch = FONT_STRETCHES[opts[:font_stretch]] if opts[:font_stretch]
draw.font_weight = FONT_WEIGHTS[opts[:font_weight]] if opts[:font_weight]
pt, pr, pb, pl = parse_padding_string(opts[:padding]) if opts[:padding]
padding_top = (opts[:padding_top] || pt || 0) * s
padding_right = (opts[:padding_right] || pr || 0) * s
padding_bottom = (opts[:padding_bottom] || pb || 0) * s
padding_left = (opts[:padding_left] || pl || 0) * s
metrics = draw.get_type_metrics(text_string)
width, height = metrics.width, metrics.height
scaled_up_width = padding_left + width + padding_right
scaled_up_height = padding_top + height + padding_bottom
image = Magick::Image.new(scaled_up_width, scaled_up_height){
self.background_color = opts[:background_color] || 'transparent'
}
draw.annotate(image, width, height, padding_left, padding_top, text_string)
image.scale!(1/s)
format = opts[:format] || :png
image.format = format.to_s
content = use_filesystem ? write_to_tempfile(image) : image.to_blob
image.destroy!
[
content,
{:format => format, :name => "text.#{format}"}
]
end