Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require 'RMagick'
- require 'aws-sdk'
- include Magick
- class MosaicImage
- def perform
- canvas = mosaic()
- # Resize
- width = 800
- height = 1200
- canvas = canvas.resize_to_fit(width,height)
- box(canvas)
- text(canvas)
- canvas
- end
- private
- def box(canvas)
- w = canvas.columns
- h = canvas.rows
- gc = Magick::Draw.new
- x1 = (w/2) - (w/4)
- y1 = (h/2) - (h * 0.05)
- x2 = x1 + (w/2)
- y2 = y1 + (h * 0.05)
- gc.stroke_width(1)
- gc.stroke('gray50')
- gc.fill('white')
- gc.rectangle(x1, y1, x2, y2)
- gc.draw(canvas)
- end
- def text(canvas)
- w = canvas.columns
- h = canvas.rows
- # puts(h)
- text_label = "SEE THE OUTFITS"
- pt = h / 30
- # puts(pt)
- gc = Magick::Draw.new
- gc.stroke('transparent')
- gc.font_family('Helvetica')
- gc.font_weight(Magick::NormalWeight)
- gc.pointsize(pt)
- gc.font_style(Magick::NormalStyle)
- gc.text_align(Magick::CenterAlign)
- metrics = gc.get_type_metrics(text_label)
- # puts(metrics)
- # gc.text(w/2, h/2 + ((metrics.pixels_per_em.y / (metrics.bounds.y2 - metrics.bounds.y1) ) / 2).round, text_label)
- gc.text(w/2, h/2 - ((metrics.max_advance + metrics.descent) /2), text_label)
- gc.draw(canvas)
- end
- def mosaic()
- gc = Magick::ImageList.new
- img = 1
- 5.times do
- gc.read("img"+img.to_s+".jpg")
- img += 1
- end
- b = Magick::ImageList.new
- page = Magick::Rectangle.new(0,0,0,0)
- gc.scene = 0
- 3.times do |i|
- 3.times do |j|
- b << gc.scale(1)
- page.x = j * b.columns
- page.y = i * b.rows
- b.page = page
- (gc.scene += 1) rescue gc.scene = 0
- end
- end
- b.mosaic
- end
- end
- # Generate image and write to s3
- canvas = MosaicImage.new().perform
- s3 = Aws::S3::Resource.new
- bucket = s3.bucket('my-bucket')
- bucket.object('test/canvas.png').put(body: canvas.to_blob)
- # write locally as well
- canvas.write("canvas.png")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement