Class: Dragonfly::ImageMagick::Generators::Text

Inherits:
Object
  • Object
show all
Includes:
ParamValidators
Defined in:
lib/dragonfly/image_magick/generators/text.rb

Constant Summary collapse

FONT_STYLES =
{
  "normal" => "normal",
  "italic" => "italic",
  "oblique" => "oblique",
}
FONT_STRETCHES =
{
  "normal" => "normal",
  "semi-condensed" => "semi-condensed",
  "condensed" => "condensed",
  "extra-condensed" => "extra-condensed",
  "ultra-condensed" => "ultra-condensed",
  "semi-expanded" => "semi-expanded",
  "expanded" => "expanded",
  "extra-expanded" => "extra-expanded",
  "ultra-expanded" => "ultra-expanded",
}
FONT_WEIGHTS =
{
  "normal" => "normal",
  "bold" => "bold",
  "bolder" => "bolder",
  "lighter" => "lighter",
  "100" => 100,
  "200" => 200,
  "300" => 300,
  "400" => 400,
  "500" => 500,
  "600" => 600,
  "700" => 700,
  "800" => 800,
  "900" => 900,
}
IS_COLOUR =
->(param) {
  /\A(#\w+|rgba?\([\d\.,]+\)|\w+)\z/ === param
}

Constants included from ParamValidators

ParamValidators::IS_NUMBER, ParamValidators::IS_WORD, ParamValidators::IS_WORDS

Instance Method Summary collapse

Methods included from ParamValidators

is_number, is_word, is_words, validate!, validate_all!, validate_all_keys!

Instance Method Details

#call(content, string, opts = {}) ⇒ Object



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
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/dragonfly/image_magick/generators/text.rb', line 53

def call(content, string, opts = {})
  validate_all_keys!(opts, %w(font font_family), &is_words)
  validate_all_keys!(opts, %w(color background_color stroke_color), &IS_COLOUR)
  validate!(opts["format"], &is_word)

  opts = HashWithCssStyleKeys[opts]
  args = []
  format = extract_format(opts)
  background = opts["background_color"] || "none"
  font_size = (opts["font_size"] || 12).to_i
  font_family = opts["font_family"] || opts["font"]
  escaped_string = "\"#{string.gsub(/"/, '\"')}\""

  # Settings
  args.push("-gravity NorthWest")
  args.push("-antialias")
  args.push("-pointsize #{font_size}")
  args.push("-family '#{font_family}'") if 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}")

  # Padding
  pt, pr, pb, pl = parse_padding_string(opts["padding"]) if opts["padding"]
  padding_top = (opts["padding_top"] || pt).to_i
  padding_right = (opts["padding_right"] || pr).to_i
  padding_bottom = (opts["padding_bottom"] || pb).to_i
  padding_left = (opts["padding_left"] || pl).to_i

  Commands.generate(content, 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}")
    Commands.generate(content, args.join(" "), format)
  end

  content.add_meta("format" => format, "name" => "text.#{format}")
end

#update_url(url_attributes, string, opts = {}) ⇒ Object



49
50
51
# File 'lib/dragonfly/image_magick/generators/text.rb', line 49

def update_url(url_attributes, string, opts = {})
  url_attributes.name = "text.#{extract_format(opts)}"
end