Module: WatermarkFu

Extended by:
ActiveSupport::Concern
Included in:
StorageImageProcessing
Defined in:
app/models/concerns/watermark_fu.rb

Instance Method Summary collapse

Instance Method Details

#build_watermarksObject



61
62
63
64
65
66
67
# File 'app/models/concerns/watermark_fu.rb', line 61

def build_watermarks
  create_watermark_canvas(type: :landscape)
  create_watermark_canvas(type: :portrait)

  create_watermark(type: :landscape)
  create_watermark(type: :portrait)
end

#create_watermark(opts = {}) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'app/models/concerns/watermark_fu.rb', line 40

def create_watermark opts = {}
  opts[:type] ||=  :landscape
  watermark     =  watermark_path(opts[:type])
  return false  if File.exists? watermark
  
  # text params
  angle    = opts[:type].to_sym == :landscape ? 0 : -90
  rotate   = "rotate #{angle}"
  
  text     = TheStorages.config.watermark_text
  bt       = "fill black #{rotate} text 0,12 '#{text}'"
  wt       = "fill white text 1,11 '#{text}'"
  
  fs       = "-font #{watermark_font} -pointsize 22"
  put_text = "-draw \"gravity center #{bt} #{wt}\""

  wm_canvas = watermark_canvas_path(opts[:type])
  Cocaine::CommandLine.new("convert", "#{wm_canvas} #{fs} #{put_text} -trim #{watermark}").run
  true
end

#create_watermark_canvas(opts = {}) ⇒ Object



31
32
33
34
35
36
37
38
# File 'app/models/concerns/watermark_fu.rb', line 31

def create_watermark_canvas opts = {}
  opts[:type] ||= :landscape
  size          = opts[:type].to_sym == :landscape  ? '800x50' : '50x800'
  wm_canvas     = watermark_canvas_path(opts[:type])
  return false  if File.exists? wm_canvas
  Cocaine::CommandLine.new("convert", "-size #{size} xc:transparent #{wm_canvas}").run
  true
end

#has_watermark?Boolean

Returns:

  • (Boolean)


8
9
10
# File 'app/models/concerns/watermark_fu.rb', line 8

def has_watermark?
  TheStorages.has_watermark?
end

#need_watermark?Boolean

Returns:

  • (Boolean)


4
5
6
# File 'app/models/concerns/watermark_fu.rb', line 4

def need_watermark?
  self.watermark && has_watermark?
end

#put_watermark_on_base_imageObject



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
# File 'app/models/concerns/watermark_fu.rb', line 69

def put_watermark_on_base_image
  base  = path :base
  image = MiniMagick::Image.open base

  # top    = north
  # bottom = south
  # right  = east
  # left   = west

  watermark = watermark_path
  position  = :south
  x_shift   = "+0"
  y_shift   = "+10"
  
  if portrait?(image)
    watermark =  watermark_path(:portrait)
    position  = :east
    x_shift   = "+10"
    y_shift   = "+0"
  end

  stick   = "-gravity #{position}"
  shift   = "-geometry #{x_shift}#{y_shift}"
  opacity = "-dissolve 80%"

  Cocaine::CommandLine.new("composite", " #{stick} #{shift} #{opacity} #{watermark} #{base} #{base}").run
  base
end

#watermark_canvas_path(style = :landscape) ⇒ Object



18
19
20
# File 'app/models/concerns/watermark_fu.rb', line 18

def watermark_canvas_path style = :landscape
  "#{watermark_dir_path}/watermark_#{style}_canvas.png"
end

#watermark_dir_pathObject



12
13
14
15
16
# File 'app/models/concerns/watermark_fu.rb', line 12

def watermark_dir_path
  dir_path  = TheStorages.config.watermarks_path
  FileUtils.mkdir_p dir_path
  dir_path
end

#watermark_fontObject



26
27
28
29
# File 'app/models/concerns/watermark_fu.rb', line 26

def watermark_font
  path = TheStorages.config.watermark_font_path
  File.exists?(path.to_s) ? path : 'Times-Roman'
end

#watermark_path(style = :landscape) ⇒ Object



22
23
24
# File 'app/models/concerns/watermark_fu.rb', line 22

def watermark_path style = :landscape
  "#{watermark_dir_path}/watermark_#{style}.png"
end