Составное изображение Rmagick без источника

У меня есть модель галереи и модель поста. У каждого сообщения есть изображение, и я хотел бы создать составное изображение для каждой галереи на основе сообщений в этой галерее. У меня есть метод для галерей, который возвращает URL-адреса первых 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?


person Tyler    schedule 25.07.2013    source источник


Ответы (1)


Да просто обрабатывать данные на ходу, сама версия не нужна:

Замените эту строку:

  version("full") { process :full_image }

С этим

  process :full_image
person khelll    schedule 04.02.2015