lib/thumbnail.rb in vcs_ruby-0.8.5 vs lib/thumbnail.rb in vcs_ruby-1.0.0

- old
+ new

@@ -7,16 +7,17 @@ module VCSRuby class Thumbnail attr_accessor :width, :height, :aspect attr_accessor :image_path attr_accessor :time + attr_reader :filters def initialize capper, video, configuration @capper = capper @video = video @configuration = configuration - @filters = [ method(:resize_filter), method(:timestamp_filter), method(:softshadow_filter) ] + @filters = [] end def capture @capper.grab @time, @image_path end @@ -45,18 +46,32 @@ def apply_filters MiniMagick::Tool::Convert.new do |convert| convert.background 'Transparent' convert.fill 'Transparent' convert << @image_path - @filters.each do |filter| - filter.call(convert) + + sorted_filters.each do |filter| + call_filter filter, convert end + convert << @image_path end end private + def call_filter filter, convert + if respond_to?(filter, true) + method(filter).call(convert) + else + raise "Filter '#{filter}' does not exist" + end + end + + def sorted_filters + [:resize_filter, :timestamp_filter, :photoframe_filter, :polaroid_filter, :random_rotation_filter, :softshadow_filter].select{ |filter| @filters.include?(filter) } + end + def resize_filter convert convert.resize "#{width}x#{height}!" end def timestamp_filter convert @@ -72,17 +87,10 @@ end convert.flatten convert.gravity 'None' end - def photoframe_filter convert - convert.bordercolor 'White' - convert.border 3 - convert.bordercolor 'Grey60' - convert.border 1 - end - def softshadow_filter convert convert.stack do |box| box.background 'Black' box.clone.+ box.shadow '50x2+4+4' @@ -92,10 +100,17 @@ convert.flatten convert.trim convert.repage.+ end + def photoframe_filter convert + convert.bordercolor 'White' + convert.border 3 + convert.bordercolor 'Grey60' + convert.border 1 + end + def polaroid_filter convert border = 8 convert.stack do |a| a.fill 'White' a.background 'White' @@ -107,11 +122,11 @@ b.splice "0x#{border*5}" end a.flip a.bordercolor 'Grey60' a.border 1 - a.repage.+ end + convert.repage.+ end def random_rotation_filter convert angle = Random::rand(-18..18) convert.background 'None'