require 'RMagick' module Photoapp class Photo include Magick attr_accessor :file, :logo, :image, :config, :session def initialize(file, logo, session) @file = file @logo = logo @session = session @config = session.config end def config @config end def image @image ||= Image.read(file).first.resize_to_fill(2100, 1500, NorthGravity) end def watermark @watermarked ||= image.composite(logo, SouthWestGravity, OverCompositeOp) end def with_url @printable ||= begin light_url = add_url("#fff") dark_url = add_url("#000", true).blur_image(radius=6.0, sigma=2.0) watermark.dup .composite(dark_url, SouthEastGravity, OverCompositeOp) .composite(light_url, SouthEastGravity, OverCompositeOp) end end def add_url(color, stroke=false) setting = config image = Image.new(800,100) { self.background_color = "rgba(255, 255, 255, 0)" } text = Draw.new text.annotate(image, 0, 0, 60, 50, "#{setting['url_base']}/#{short}.jpg") do text.gravity = SouthEastGravity text.pointsize = setting['font_size'] text.fill = color text.font = setting['font'] if stroke text.stroke = color end end image end def write puts "writing #{upload_dest}" puts "writing #{print_dest}" FileUtils.mkdir_p(File.dirname(upload_dest)) FileUtils.mkdir_p(File.dirname(print_dest)) watermark.write upload_dest with_url.write print_dest cleanup end def add_to_photos `automator -i #{config['print']} #{Photoapp.gem_dir("lib/import-photos.workflow")}` end def cleanup watermark.destroy! with_url.destroy! end def upload_dest File.join(config['upload'], short + '.jpg') end def print_dest File.join(config['print'], short + '.jpg') end def short @short ||= begin now = Time.now date = "#{now.strftime('%y')}#{now.strftime('%d')}#{now.month}" source = [*?a..?z] - ['o', 'l'] + [*2..9] short = '' 5.times { short << source.sample.to_s } short = "#{short}#{date}" session.photos << short + '.jpg' short end end end end