module ImageMosaic module Image #Takes an array of images and metrics and then returns a single image of composited images. class Parent def initialize(items, colour:, width:) @items = items @colour = colour @width = width end def create image.run_command(:convert, '-size', dimensions, "xc:#{@colour}", image.path) @items.each { |item| @image = add_image(item) } Mosaic.new(image) end private def dimensions # Parent image is always square for time being. "#{@width}x#{@width}" end def add_image(image) Operations::Compositor.new(@image, image).save end def temp_file @temp_file ||= Tempfile.new(['image_mosaic', '.png']) end def image @image ||= MiniMagick::Image.new(temp_file.path) end end end end