module Sinatra::Thumbnails
Public Class Methods
convert(src, dest, format)
click to toggle source
# File lib/sinatra/thumbnails.rb, line 49 def self.convert(src, dest, format) if (format =~ /(.*)-crop$/) if (im_version <=> [6,6,4]) >= 0 format = $1 + "^" + " -gravity center -extent " + $1 else format = $1 end end FileUtils.mkdir_p(File.dirname(dest)) command = "#{Sinatra::Thumbnails.settings.convert_executable} -define jpeg:size=400x400 '#{src}' -thumbnail #{format} '#{dest}'" # puts "Sinatra::Thumbnails: issuing \"#{command}\"" run_command(command) end
ffmpeg(src, dest, format)
click to toggle source
# File lib/sinatra/thumbnails.rb, line 63 def self.ffmpeg(src, dest, format) puts "making movie thumb on the fly" seconds = (src =~ /\.ss([\d]+)/) ? Regexp.last_match(1).to_i : 0 command = "#{Sinatra::Thumbnails.settings.ffmpeg_executable} -y -i '#{src}' -an -ss #{seconds} -r 1 -vframes 1 -f mjpeg '#{dest}'" # puts "Sinatra::Thumbnails: issuing \"#{command}\"" run_command(command) convert(dest, dest, format) end
im_version()
click to toggle source
# File lib/sinatra/thumbnails.rb, line 44 def self.im_version `convert --version` =~ /Version: ImageMagick ([\d\.]+)/ Regexp.last_match(1).split('.').map{|s|s.to_i} end
make_thumb(file, format, original_extension)
click to toggle source
# File lib/sinatra/thumbnails.rb, line 27 def self.make_thumb(file, format, original_extension) original_extension ||= "jpg" thumbnail_file = File.join(settings.thumbnail_path, "#{format}/#{file}") FileUtils.mkdir_p File.dirname(thumbnail_file) orig_file = File.join(settings.image_path_prefix, file.gsub(/(.*\.)(.*$)/,"\\1#{original_extension}")) unless File.exists?(thumbnail_file) and (File.stat(thumbnail_file).mtime >= File.stat(orig_file).mtime) if original_extension =~ /mov$/ ffmpeg(orig_file, thumbnail_file, format) else convert(orig_file, thumbnail_file, format) end end thumbnail_file end
registered(app)
click to toggle source
# File lib/sinatra/thumbnails.rb, line 95 def self.registered(app) app.helpers Helpers # gotta make this a regexp, :asset wont match stuff with "/" in it app.get /#{settings.thumbnail_path}\/([^\/]+)\/(.*)$/ do send_file Thumbnails.make_thumb(params[:captures][1], params[:captures][0], params[:original_extension]) end end
run_command(command)
click to toggle source
# File lib/sinatra/thumbnails.rb, line 72 def self.run_command(command) output = `#{command} 2>&1` raise "couldn't run #{command}: #{output}" unless $?.success? end
settings()
click to toggle source
# File lib/sinatra/thumbnails.rb, line 78 def self.settings @@settings ||= { :convert_executable => 'convert' , :ffmpeg_executable => 'ffmpeg' , :thumbnail_path => 'public/thumbnails' , :image_path_prefix => 'public' , :thumbnail_extension => 'png' , :thumbnail_format => '100x100' }.extend(Thumbnails::Settings) end