# File lib/dragonfly/generation/r_magick_generator.rb, line 56
      def text(text_string, opts={})
        opts = HashWithCssStyleKeys[opts]

        draw = Magick::Draw.new
        draw.gravity = Magick::CenterGravity
        draw.text_antialias = true

        # Font size
        font_size = (opts[:font_size] || 12).to_i

        # Scale up the text for better quality -
        #  it will be reshrunk at the end
        s = scale_factor_for(font_size)

        # Settings
        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]

        # Padding
        # NB the values are scaled up by the scale factor
        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

        # Calculate (scaled up) dimensions
        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

        # Draw the background
        image = Magick::Image.new(scaled_up_width, scaled_up_height){
          self.background_color = opts[:background_color] || 'transparent'
        }
        # Draw the text
        draw.annotate(image, width, height, padding_left, padding_top, text_string)

        # Scale back down again
        image.scale!(1/s)

        format = opts[:format] || :png
        image.format = format.to_s

        # Output image either as a string or a tempfile
        content = use_filesystem ? write_to_tempfile(image) : image.to_blob
        image.destroy!
        [
          content,
          {:format => format, :name => "text.#{format}"}
        ]
      end