Class: Paperclip::Watermark

Inherits:
Processor
  • Object
show all
Defined in:
lib/paperclip-watermark/watermark.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(file, options = {}, attachment = nil) ⇒ Watermark

Returns a new instance of Watermark.



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/paperclip-watermark/watermark.rb', line 17

def initialize file, options = {}, attachment = nil
  super
  geometry            = options[:geometry]
  @crop               = geometry[-1,1] == '#' if geometry.present?

  @file               = file
  @target_geometry    = Geometry.parse geometry
  @current_geometry   = Geometry.from_file @file

  @convert_options    = options[:convert_options]
  @whiny              = options[:whiny].nil? ? true : options[:whiny]
  @format             = options[:format]

  @watermark_path     = options[:watermark_path]
  @position           = options[:watermark_position].nil? ? "Center"  : options[:watermark_position]
  @overlay            = options[:watermark_overlay].nil?  ? true      : false
  @tile               = options[:watermark_tile].nil?     ? false     : options[:watermark_tile]
  @watermark_option   = options[:watermark_option].nil?   ? nil       : options[:watermark_option]
  @dissolve_option    = options[:dissolve_option].nil?    ? nil       : options[:dissolve_option]
  @watermark_geometry = options[:watermark_geometry].nil? ? nil       : options[:watermark_geometry]
  @watermark_resize   = options[:watermark_resize].nil?   ? nil       : options[:watermark_resize]

  @current_format     = File.extname(@file.path)
  @basename           = File.basename(@file.path, @current_format)
end

Instance Attribute Details

#convert_optionsObject

Handles watermarking of images that are uploaded.



13
14
15
# File 'lib/paperclip-watermark/watermark.rb', line 13

def convert_options
  @convert_options
end

#current_geometryObject

Handles watermarking of images that are uploaded.



13
14
15
# File 'lib/paperclip-watermark/watermark.rb', line 13

def current_geometry
  @current_geometry
end

#dissolve_optionObject

Handles watermarking of images that are uploaded.



13
14
15
# File 'lib/paperclip-watermark/watermark.rb', line 13

def dissolve_option
  @dissolve_option
end

#formatObject

Handles watermarking of images that are uploaded.



13
14
15
# File 'lib/paperclip-watermark/watermark.rb', line 13

def format
  @format
end

#overlayObject

Handles watermarking of images that are uploaded.



13
14
15
# File 'lib/paperclip-watermark/watermark.rb', line 13

def overlay
  @overlay
end

#positionObject

Handles watermarking of images that are uploaded.



13
14
15
# File 'lib/paperclip-watermark/watermark.rb', line 13

def position
  @position
end

#target_geometryObject

Handles watermarking of images that are uploaded.



13
14
15
# File 'lib/paperclip-watermark/watermark.rb', line 13

def target_geometry
  @target_geometry
end

#tileObject

Handles watermarking of images that are uploaded.



13
14
15
# File 'lib/paperclip-watermark/watermark.rb', line 13

def tile
  @tile
end

#watermark_geometryObject

Handles watermarking of images that are uploaded.



13
14
15
# File 'lib/paperclip-watermark/watermark.rb', line 13

def watermark_geometry
  @watermark_geometry
end

#watermark_optionObject

Handles watermarking of images that are uploaded.



13
14
15
# File 'lib/paperclip-watermark/watermark.rb', line 13

def watermark_option
  @watermark_option
end

#watermark_pathObject

Handles watermarking of images that are uploaded.



13
14
15
# File 'lib/paperclip-watermark/watermark.rb', line 13

def watermark_path
  @watermark_path
end

#watermark_resizeObject

Handles watermarking of images that are uploaded.



13
14
15
# File 'lib/paperclip-watermark/watermark.rb', line 13

def watermark_resize
  @watermark_resize
end

#whinyObject

Handles watermarking of images that are uploaded.



13
14
15
# File 'lib/paperclip-watermark/watermark.rb', line 13

def whiny
  @whiny
end

Instance Method Details

#convert_options?Boolean

Returns true if the image is meant to make use of additional convert options.

Returns:

  • (Boolean)


51
52
53
# File 'lib/paperclip-watermark/watermark.rb', line 51

def convert_options?
  not [*@convert_options].reject(&:blank?).empty?
end

#crop?Boolean

Returns true if the target_geometry is meant to crop.

Returns:

  • (Boolean)


46
47
48
# File 'lib/paperclip-watermark/watermark.rb', line 46

def crop?
  @crop
end

#fromfileObject



99
100
101
# File 'lib/paperclip-watermark/watermark.rb', line 99

def fromfile
  File.expand_path(@file.path)
end

#makeObject

Performs the conversion of the file into a watermark. Returns the Tempfile that contains the new image.



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
# File 'lib/paperclip-watermark/watermark.rb', line 57

def make
  filename = [@basename, @format ? ".#{@format}" : ""].join
  dst = TempfileFactory.new.generate(filename)

  if watermark_path
    # unless _transformation_command.blank?
    #   command = "convert"
    #   params = [fromfile]
    #   params += transformation_command
    #   params << tofile(dst)
    #   begin
    #     success = Paperclip.run(command, params.flatten.compact.join(" "))
    #   rescue Paperclip::Errors::CommandNotFoundError
    #     raise Paperclip::Errors::CommandNotFoundError, "There was an error resizing and cropping #{@basename}" if @whiny
    #   end
    # end

    command = "composite"
    params = []
    params += %W[-geometry #{watermark_geometry}] if watermark_geometry
    params += %W[-dissolve #{dissolve_option}] if dissolve_option
    params += %W[-watermark #{watermark_option}] if watermark_option
    if tile
      params += %W[-tile]
    else
      params += %W[-gravity #{position}]
    end
    if watermark_resize
      params += %W[#{"\\( #{watermark_path} -resize #{watermark_resize} \\)"} #{fromfile} #{tofile(dst)}]
    else
      params += %W[#{watermark_path} #{fromfile} #{tofile(dst)}]
    end
    begin
      success = Paperclip.run(command, params.flatten.compact.join(" "))
    rescue Paperclip::Errors::CommandNotFoundError
      raise Paperclip::Errors::CommandNotFoundError, "There was an error processing the watermark for #{@basename}" if @whiny
    end
  end

  dst
end

#tofile(destination) ⇒ Object



103
104
105
# File 'lib/paperclip-watermark/watermark.rb', line 103

def tofile(destination)
  [@format, File.expand_path(destination.path)].compact.join(':')
end

#transformation_commandObject



107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# File 'lib/paperclip-watermark/watermark.rb', line 107

def transformation_command
  if @target_geometry.present?
    scale, crop = @current_geometry.transformation_to(@target_geometry, crop?)
    trans = []
    trans += %W[-resize #{scale}]
    trans += %W[-crop #{crop} +repage] if crop
    trans += [*convert_options] if convert_options?
  else
    scale, crop = @current_geometry.transformation_to(@current_geometry, crop?)
    trans = []
    trans += %W[-resize #{scale}] if scale
    trans += %W[-crop #{crop} +repage] if crop
    trans += [*convert_options] if convert_options?
  end
  trans
end