class FlickrCollage
Constants
- VERSION
Attributes
collage[RW]
dir[RW]
filename[RW]
image_list[RW]
keywords[RW]
random_keywords[RW]
squares[RW]
unsuccessful_keywords[RW]
Public Class Methods
new(keywords: [], filename: 'collage.jpg', dir: '.', no_of_images: nil, rows: nil, squares: false)
click to toggle source
# File lib/flickr_collage.rb, line 14 def initialize(keywords: [], filename: 'collage.jpg', dir: '.', no_of_images: nil, rows: nil, squares: false) @filename = filename @dir = dir @squares = squares @no_of_images = no_of_images || (keywords.empty? ? 10 : keywords.length) assign_and_extend_keywords(keywords) @image_list, @unsuccessful_keywords = FileLoader.image_list(@keywords) create_collage(rows: rows || Math.sqrt(@no_of_images).floor) end
Public Instance Methods
save(force: false)
click to toggle source
# File lib/flickr_collage.rb, line 26 def save(force: false) path = prepare_and_check_path(force) @collage.write(path) rescue Errors::DirNotFound, Errors::FileExist raise rescue => e raise Errors::FileCannotBeSaved, "#{e.class}: #{e.message}" end
save!()
click to toggle source
# File lib/flickr_collage.rb, line 35 def save! save(force: true) end
Private Instance Methods
assign_and_extend_keywords(keywords)
click to toggle source
# File lib/flickr_collage.rb, line 41 def assign_and_extend_keywords(keywords) @random_keywords = [] (@no_of_images - keywords.length).times { @random_keywords << Dictionary.words.sample } @keywords = keywords + @random_keywords end
create_collage(rows: 3, width: 1200)
click to toggle source
# File lib/flickr_collage.rb, line 47 def create_collage(rows: 3, width: 1200) @image_list.scene = 0 collage_list = Magick::ImageList.new height = 0 rows.times do |i| row = create_image_row(no_of_images: images_per_row(rows, i)) collage_list << row.scale(width.to_f / row.columns) collage_list.page = Magick::Rectangle.new(0, 0, 0, height) height += collage_list.rows end @collage = collage_list.mosaic end
create_image_row(no_of_images:, height: 300)
click to toggle source
# File lib/flickr_collage.rb, line 62 def create_image_row(no_of_images:, height: 300) row = Magick::ImageList.new width = 0 no_of_images.times do row << (@squares ? @image_list.resize_to_fill(height) : @image_list.scale(height.to_f / @image_list.rows)) row.page = Magick::Rectangle.new(0, 0, width, 0) width += row.columns increment_image_list_scene end row.mosaic end
images_per_row(rows, i)
click to toggle source
# File lib/flickr_collage.rb, line 82 def images_per_row(rows, i) @no_of_images / rows + (i.positive? && i <= @no_of_images % rows ? 1 : 0) end
increment_image_list_scene()
click to toggle source
# File lib/flickr_collage.rb, line 76 def increment_image_list_scene @image_list.scene += 1 rescue @image_list.scene = 0 end
prepare_and_check_path(force)
click to toggle source
# File lib/flickr_collage.rb, line 86 def prepare_and_check_path(force) raise Errors::DirNotFound unless File.directory?(dir.to_s) path = File.join(dir, filename) raise Errors::FileExist if !force && File.exist?(path) path end