Создание прикрепления скрепки из изображения rmagick - PullRequest
9 голосов
/ 27 октября 2010

У меня проблема с поиском способа сохранить изображение, созданное с помощью 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 ]

12 голосов
/ 27 октября 2010

Посмотрим, нужно ли вам это

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

Замените YourModel моделью, которую вы используете ...

5 голосов
/ 30 апреля 2013

Вы должны принудительно установить расширение на 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
0 голосов
/ 31 января 2017

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

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

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

...