我有一个 Gallery 模型和一个 Post 模型。每个帖子都有一个图像,我想根据该画廊中的帖子为每个画廊创建一个合成图像。我有一种画廊方法,可以将网址返回到画廊中的前 4 个图像:
gallery.images_for_preview # => returns array of 4 image urls (200x200 images)
我正在使用 Carrierwave + RMagick 生成合成图像。我试图在这里跟随:http ://railscasts.com/episodes/374-image-manipulation但似乎我的用例略有不同。我有:
class GalleryImageUploader < CarrierWave::Uploader::Base
...
def store_dir
"galleries/#{model.obfuscated_id}"
end
version("full") { process :full_image }
def full_image
images = model.images_for_preview
puts images
manipulate! format: "png" do
image0 = Magick::Image.read(images[0]).first
image1 = Magick::Image.read(images[1]).first
image2 = Magick::Image.read(images[2]).first
image3 = Magick::Image.read(images[3]).first
underlay = Magick::Image.new(406, 406) { self.background_color = "#333333" }
underlay.composite!(image0, 2, 2, Magick::OverCompositeOp).composite!(image1, 204, 2, Magick::OverCompositeOp).composite!(image2, 2, 204, Magick::OverCompositeOp).composite!(image3, 204, 204, Magick::OverCompositeOp)
end
end
full_image 操作不需要源文件,但我似乎可以让它生成合成图像的唯一方法是执行以下操作:
gallery.remote_image_url = "path/to/image"
它生成我需要的图像,/galleries/:id/full_image.png
但也处理并生成图像/galleries/:id/image.png
是否可以跳过“源”图像并仅生成合成图像,然后将其作为 ImageUploader 的主图像上传?