Создать вложение скрепки из изображения rmagick


У меня есть проблема, чтобы найти способ сохранить изображение, созданное с помощью RMagick во вложении скрепки.

imageList = Magick::ImageList.new
imageList.new("images/apple.gif", "images/overlay.png")
...
picture = imageList.flatten_images

Я нахожусь в модели, которая имеет вложенный файл

has_attached_file :picture, :url => ..., :path => ...

И я просто хочу, чтобы мой образ был возвращен imageList.flatten_images, который будет сохранен как изображение моей модели.

Кто-нибудь знает, как сделать это легко, пожалуйста?

Спасибо

3 9

3 ответа:

Давайте посмотрим, если это то, что вам нужно

picture = imageList.flatten_images
file = Tempfile.new('my_picture.jpg')
picture.write(file.path)
YourModel.create(:picture => file, ...)

Измените YourModel с помощью используемой модели...

Вы должны принудительно установить расширение на TempFile.new; в этом случае я извлекаю исходное изображение из S3 или чего-то подобного, это происходит в модели, конечно:

orig_img = Magick::ImageList.new(self.photo.url(:original))

#process image here

# Force extension with array form:
file = Tempfile.new(['processed','.jpg'])
orig_img.write(file.path)
self.photo = file
self.save

В более поздних версиях скрепки (моя - 5.0.0) вам нужно будет предоставить собственный экземпляр скрепки Tempfile:

file = Paperclip::Tempfile.new(["processed", ".jpg"])
thumb.write(file.path)
result = YourModel.create(image: file)

Это сохраняет расширение файла в конце имени файла, так что он распознается скрепкой При загрузке.