class Photoapp::Photo

Attributes

config[RW]
file[RW]
image[RW]
session[RW]

Public Class Methods

new(file, logo, session) click to toggle source
# File lib/photoapp/photo.rb, line 8
def initialize(file, logo, session)
  @file = file
  @logo = logo
  @session = session
  @config = session.config
end

Public Instance Methods

add_shadowed_text(text, size, gravity, width=800) click to toggle source
# File lib/photoapp/photo.rb, line 50
def add_shadowed_text(text, size, gravity, width=800)
  setting = config
  shadowed_text = []

  %w(#000 #fff).each do |color|
    image = Image.new(width, 70) { self.background_color = "rgba(255, 255, 255, 0" }
    txt = Draw.new
    txt.annotate(image, 0, 0, 0, 0, text) do
      txt.gravity = gravity
      txt.pointsize = size
      txt.fill = color
      txt.font = setting['font']

      if color == '#000'
        txt.stroke = color
      end
    end

    # Blur drop shadow
    if color == '#000'
      image = image.blur_image(radius=6.0, sigma=2.0)
    end

    shadowed_text.push image
  end

  shadowed_text
end
cleanup() click to toggle source
# File lib/photoapp/photo.rb, line 108
def cleanup
  watermark.destroy!
  with_url.destroy!
end
date_text() click to toggle source
# File lib/photoapp/photo.rb, line 45
def date_text
  date = Time.now.strftime('%b %d, %Y')
  add_shadowed_text date, config['date_font_size'], NorthEastGravity, 250
end
import_dest() click to toggle source
# File lib/photoapp/photo.rb, line 127
def import_dest
  File.join(config['photos_import'], short + '.jpg')
end
print_dest() click to toggle source
print_dup_dest() click to toggle source
short() click to toggle source
# File lib/photoapp/photo.rb, line 131
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
upload_dest() click to toggle source
# File lib/photoapp/photo.rb, line 113
def upload_dest
  File.join(config['upload'], short + '.jpg')
end
url_text() click to toggle source
# File lib/photoapp/photo.rb, line 41
def url_text
  add_shadowed_text "#{config['url_base']}/#{short}.jpg", config['font_size'], NorthEastGravity
end
watermark() click to toggle source
# File lib/photoapp/photo.rb, line 23
def watermark
  @watermarked ||= begin
    date = date_text
    image.composite(logo, SouthWestGravity, 50, 45, OverCompositeOp)
      .composite(date[0], SouthWestGravity, 0, -10, OverCompositeOp)
      .composite(date[1], SouthWestGravity, 0, -10, OverCompositeOp)
  end
end
with_url() click to toggle source
# File lib/photoapp/photo.rb, line 32
def with_url
  @printable ||= begin
    url = url_text
    watermark.dup
      .composite(url[0], SouthEastGravity, 40, 30, OverCompositeOp)
      .composite(url[1], SouthEastGravity, 40, 30, OverCompositeOp)
  end
end
write(path=nil) click to toggle source
# File lib/photoapp/photo.rb, line 79
def write(path=nil)
  if path
    FileUtils.mkdir_p(File.dirname(path))
    with_url.write path
    cleanup
  else
    FileUtils.mkdir_p(File.dirname(upload_dest))
    FileUtils.mkdir_p(File.dirname(print_dest))
    FileUtils.mkdir_p(File.dirname(print_dup_dest)) if print_dup_dest
    FileUtils.mkdir_p(File.dirname(import_dest))

    puts "writing #{upload_dest}"
    watermark.write upload_dest

    puts "writing #{print_dest}"
    with_url.write print_dest

    if print_dup_dest
      puts "writing #{print_dup_dest}"
      with_url.write print_dup_dest
    end

    puts "writing #{import_dest}"
    with_url.write import_dest

    cleanup
  end
end