2010-10-27 2 views
8

J'ai un problème pour trouver un moyen de sauvegarder une image créée avec RMagick dans un fichier joint.Création d'une pièce jointe en trombone à partir de l'image rmagick

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

Je suis dans un modèle qui a un fichier joint

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

et je veux juste mon image renvoyée par imageList.flatten_images être enregistré en tant que l'image de mon modèle.

Est-ce que quelqu'un sait comment le faire facilement s'il vous plaît?

grâce

Répondre

12

Voyons voir si c'est ce dont vous avez besoin

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

changement YourModel avec le modèle que vous utilisez ...

+1

J'ai dû changer my_picture pour terminer avec .jpg pour que le traitement fonctionne. Merci! – miccet

5

Vous devez forcer l'extension sur TempFile.new; dans ce cas, je tire l'image originale de S3 ou d'une telle, ce qui se passe dans le modèle bien sûr:

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

Dans les versions ultérieures de Paperclip (le mien est 5.0.0), vous devrez fournir Paperclip propre Tempfile exemple:

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

Cela préserve l'extension de fichier à la fin du nom de fichier, de sorte qu'il est reconnu par Paperclip quand il est chargé.

Questions connexes