假設這裏真正的問題是關於用minimagick合成圖像,下面是一些代碼。請注意,我向Movie添加了一個名爲「composite_image」的字段,並且我決定將附加到Image的上傳器命名爲「file」。
def render_composite_image(source_images, coordinates)
temp_file = TempFile.new(['render_composite_image', '.jpg'])
img = MiniMagick::Image.new(temp_file.path)
img.run_command(:convert, "-size", "#{ COMPOSITE_WIDTH }x#{ COMPOSITE_HEIGHT }", "xc:white", img.path)
source_images.each_with_index do |source_image, i|
resource = MiniMagick::Image.open(source_image.file.path)
img = img.composite(resource) do |composite|
composite.geometry "#{ coordinates[i].x }x#{ coordinates[i].y }"
end
end
img.write(temp_file.path)
self.update_attributes(composite_image: temp_file)
end
在此代碼一對夫婦的注意事項:
source_images
是要複合在一起的圖像陣列。
coordinates
是您希望每個圖像在最終構圖中的位置的座標值數組。座標索引對應於各自的source_image索引。還要注意,如果座標是正值,則需要包括「+」字符,例如, 「+50」。 (您可能需要通過試驗來找到你想要的座標。)
如果您的圖片沒有存儲在本地,則需要使用source_image.file.url
而不是source_image.file.path
。
此代碼被編寫爲在電影模型的上下文中運行,但它可以隨意移動。