class Paperclip::Watermark

Public Class Methods

new(file, options = {}, attachment = nil) click to toggle source
Calls superclass method
# File lib/paperclip/watermark.rb, line 6
def initialize(file, options = {}, attachment = nil)
  super
  @file              = file
  @whiny             = options.fetch(:whiny, true)
  @watermark_path    = options[:watermark_path]
  @dissolve          = options.fetch(:watermark_dissolve, 30)
  @position          = options[:watermark_position]
  @distance_from_top = options[:watermark_distance_from_top]

  raise Paperclip::Error.new('Position or distance from top required') if @position.nil? && @distance_from_top.nil?
  raise Paperclip::Error.new('Missing watermark path') if @watermark_path.nil?
end

Public Instance Methods

composition_options(destination_path) click to toggle source
# File lib/paperclip/watermark.rb, line 29
def composition_options(destination_path)
  options = []
  options << "-dissolve #{@dissolve}%"
  options << '-quality 100'
  options << watermak_position
  options << watermark_command
  options << @file.path
  options << destination_path
  options.join(' ')
end
make() click to toggle source
# File lib/paperclip/watermark.rb, line 19
def make
  destination = Tempfile.new([file_basename, current_format ? ".#{current_format}" : ''])
  destination.binmode

  Paperclip.run('composite', composition_options(destination.path))
  destination
  rescue Paperclip::Errors::CommandNotFoundError
    raise Paperclip::Errors::CommandNotFoundError, "There was an error processing the watermark for #{@file.path}" if @whiny
end
scaled_size_for_watermark() click to toggle source
# File lib/paperclip/watermark.rb, line 58
def scaled_size_for_watermark
  destination_width = file_size.width - 20
  calculated_height = watermark_size.height.to_f / watermark_size.width.to_f * destination_width.to_f
  Paperclip::Geometry.new(destination_width, calculated_height.to_i)
end
watermak_position() click to toggle source
# File lib/paperclip/watermark.rb, line 40
def watermak_position
  if @position
    "-gravity #{@position}"
  else
    "-geometry +#{calculated_watermak_position.first}+#{calculated_watermak_position.last}"
  end
end
watermark_command() click to toggle source
# File lib/paperclip/watermark.rb, line 48
def watermark_command
  options = []
  options << '\\('
  options << @watermark_path
  options << '-resize'
  options << "#{scaled_size_for_watermark.width}x#{scaled_size_for_watermark.height}"
  options << '\\)'
  options.join(' ')
end

Private Instance Methods

calculated_watermak_position() click to toggle source
# File lib/paperclip/watermark.rb, line 82
def calculated_watermak_position
  top = ((file_size.height - scaled_size_for_watermark.height)/100) * @distance_from_top
  left = (file_size.width - scaled_size_for_watermark.width)/2
  [left, top]
end
current_format() click to toggle source
# File lib/paperclip/watermark.rb, line 78
def current_format
  File.extname(@file.path)
end
file_basename() click to toggle source
# File lib/paperclip/watermark.rb, line 74
def file_basename
  File.basename(@file.path, current_format)
end
file_size() click to toggle source
# File lib/paperclip/watermark.rb, line 70
def file_size
  @file_size ||= Paperclip::Geometry.from_file(@file.path)
end
watermark_size() click to toggle source
# File lib/paperclip/watermark.rb, line 66
def watermark_size
  @watermark_size ||= Paperclip::Geometry.from_file(@watermark_path)
end