没有来源的Rmagick合成图像

时间:2013-07-25 19:21:42

标签: ruby-on-rails image-processing carrierwave rmagick fog

我有一个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的主图像上传?

1 个答案:

答案 0 :(得分:0)

是的,只需随时处理数据,无需版本本身:

替换此行:

  version("full") { process :full_image }

有了这个

  process :full_image