2010-10-27 10 views
8

Tengo un problema para encontrar una manera de guardar una imagen creada con RMagick en un archivo adjunto de clip.Crear archivo adjunto de clip de rmagick image

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

estoy en un modelo que tiene un archivo adjunto

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

y sólo quiero mi imagen devuelta por imageList.flatten_images para ser salvo que la imagen de mi modelo.

¿Alguien sabe cómo hacerlo fácilmente, por favor?

gracias

Respuesta

12

Veamos si eso es lo que necesita

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

Cambio YourModel con el modelo que está utilizando ...

+1

Tuve que cambiar el my_picture para terminar con .jpg para que el proceso funcione. ¡Gracias! – miccet

5

Usted debe forzar la prórroga en TempFile.new; en este caso, me tire de la imagen original de S3 o algo así, esto está sucediendo en el modelo, por supuesto:

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

En las versiones posteriores de Paperclip (el mío es 5.0.0), tendrá que proporcionar Paperclip propio Tempfile ejemplo:

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

Esto preserva la extensión de archivo al final del nombre de archivo, por lo que es reconocido por Paperclip cuando está cargado.

Cuestiones relacionadas