Создать вложение скрепки из изображения 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 ответа:
Давайте посмотрим, если это то, что вам нужно
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)
Это сохраняет расширение файла в конце имени файла, так что он распознается скрепкой При загрузке.