46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
# File 'lib/dragonfly/image_magick/generators/text.rb', line 46
def call(content, string, opts={})
opts = HashWithCssStyleKeys[opts]
args = []
format = (opts)
background = opts['background_color'] || 'none'
font_size = (opts['font_size'] || 12).to_i
escaped_string = "\"#{string.gsub(/"/, '\"')}\""
args.push("-gravity NorthWest")
args.push("-antialias")
args.push("-pointsize #{font_size}")
args.push("-font \"#{opts['font']}\"") if opts['font']
args.push("-family '#{opts['font_family']}'") if opts['font_family']
args.push("-fill #{opts['color']}") if opts['color']
args.push("-stroke #{opts['stroke_color']}") if opts['stroke_color']
args.push("-style #{FONT_STYLES[opts['font_style']]}") if opts['font_style']
args.push("-stretch #{FONT_STRETCHES[opts['font_stretch']]}") if opts['font_stretch']
args.push("-weight #{FONT_WEIGHTS[opts['font_weight']]}") if opts['font_weight']
args.push("-background #{background}")
args.push("label:#{escaped_string}")
pt, pr, pb, pl = parse_padding_string(opts['padding']) if opts['padding']
padding_top = (opts['padding_top'] || pt || 0)
padding_right = (opts['padding_right'] || pr || 0)
padding_bottom = (opts['padding_bottom'] || pb || 0)
padding_left = (opts['padding_left'] || pl || 0)
content.generate!(:convert, args.join(' '), format)
if (padding_top || padding_right || padding_bottom || padding_left)
dimensions = content.analyse(:image_properties)
text_width = dimensions['width']
text_height = dimensions['height']
width = padding_left + text_width + padding_right
height = padding_top + text_height + padding_bottom
args = args.slice(0, args.length - 2)
args.push("-size #{width}x#{height}")
args.push("xc:#{background}")
args.push("-annotate 0x0+#{padding_left}+#{padding_top} #{escaped_string}")
content.generate!(:convert, args.join(' '), format)
end
content.add_meta('format' => format, 'name' => "text.#{format}")
end
|