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'