2017-05-31 1 views
1

Je dois générer plusieurs copies d'une image dans différents formats/tailles. Puis-je le faire sans rouvrir la source pour chaque format/taille?Faire plusieurs copies de l'original avec image = MiniMagick

Prenez cet exemple:

# Original image is jpeg 
image = MiniMagick::Image.open url 
image.crop dimensions 
image.format 'pdf' 
upload image 
# image = MiniMagick::Image.open url # No! Needless network traffic and processing. 
image.format 'png' 
image.resize new_size 
upload image 

Ce code est pas bon sans le second #open parce que quand image.format 'png' est appelée l'image est un PDF, donc je finirais la pixellisation, ce qui est pas ce que je veux faire.

Il existe une méthode #clone, mais elle ne crée pas de clone de l'objet image. Au contraire, il définit un paramètre pour le convertisseur. Je n'arrive pas à comprendre si cela répondra à mon objectif.

Répondre

0

J'ai trouvé un moyen de le faire, ce qui semble bien.

# Original image is jpeg 
image = MiniMagick::Image.open url 
image.crop dimensions 

new_image = MiniMagick::Image.open image.tempfile.path 

image.format 'pdf' 
upload image 

new_image.format 'png' 
new_image.resize new_size 
upload new_image 

Les fichiers PDF et PNG seront recadrés, mais chacun ne sera converti qu'une seule fois.