2014-09-17 1 views
0

J'ai un modèle Photo qui a 2 styles :original et :medium:medium est une version recadrée de l'original. Je voudrais maintenant ajouter un style :small qui est juste une version redimensionnée du :medium. Pour les nouvelles images tout fonctionne: je viens de recadrer l'image originale deux fois, une fois pour le :medium et une fois pour le style :small. Mais j'ai aussi plusieurs milliers d'images existantes qui doivent être retraitées pour avoir un pouce :small (toutes stockées sur AWS S3). Malheureusement, je ne peux pas simplement appeler .reprocess! :small car il fera de petites versions de l'original, alors que j'ai besoin de petites versions basées sur la version recadrée :medium.Generate nouvelle vignette de style basé sur le style existant en utilisant Paperclip et aws-sdk

Les versions moyennes ont été recadrées par les utilisateurs, donc je ne peux pas simplement retraiter les originaux.

est-il un moyen facile de le faire en utilisant Paperclip ou dois-je écrire un script pour tirer la version :medium de S3, redimensionner localement, puis l'expédier dans le répertoire :small sur S3?

MISE À JOUR 1:

Ce sont mes styles

:original, { geometry: "1500x1500>",      format: :jpg }, 
:medium, { geometry: "650x650#", processors: [:cropper], format: :jpg }, 
:small,  { geometry: "262x262#", processors: [:cropper], format: :jpg } 

Notez que je l'ai déjà ajouté le style :small, mais je dois encore générer :small pouces pour les images qui ont été créées avant cet ajout.

MISE À JOUR 2: La façon de le faire, il utilise probablement une tâche de râteau qui:

  1. chercher une image :medium de S3 pour chaque photo qui a été créé avant :small le style a été ajouté
  2. redimensionner jusqu'à :small taille
  3. télécharger l'image résultante /some/path/to/small/image/ sur S3

Je ne sais pas par où commencer.

+0

Ceci est déroutant, c'est: petite juste une version redimensionnée de: original ou voulez-vous qu'il soit basé sur: moyen? – tirdadc

+0

@Tirdadc désolé, une faute de frappe, oui,: petite doit être une version redimensionnée du: moyen. Va résoudre la question maintenant. – Sbbs

+0

Pouvez-vous également publier vos: définitions de styles? Merci! – tirdadc

Répondre

0

On dirait que vous pourriez utiliser un processeur personnalisé. Dans le passé, j'ai copié des processeurs à partir d'un trombone et je les ai modifiés pour faire ce dont j'avais besoin. Par exemple, si vous prenez le processeur de vignettes, modifiez-le pour qu'il recadre votre vignette et le redimensionne comme vous le souhaitez, puis enregistrez-le en tant que processeur personnalisé (il devrait être chargé si vous le placez dans lib/paperclip).

De toute façon. Copiez le fichier de https://github.com/thoughtbot/paperclip/blob/master/lib/paperclip/thumbnail.rb

Modifier la section:

def transformation_command 
    scale, crop = @current_geometry.transformation_to(@target_geometry, crop?) 
    trans = [] 
    trans << "-coalesce" if animated? 
    trans << "-auto-orient" if auto_orient 
    trans << "-resize" << %["#{scale}"] unless scale.nil? || scale.empty? 
    trans << "-crop" << %["#{crop}"] << "+repage" if crop 
    trans << '-layers "optimize"' if animated? 
trans 
end 

pour recadrer l'image avant de la redimensionner. Mon problème est que vous devrez échanger les commandes de redimensionnement et de recadrage, mais je ne suis pas sûr. Tout paperclip est exécuté avec les commandes imagemagick, vous pouvez donc trouver une bonne documentation ici: http://www.imagemagick.org/script/command-line-processing.php

Enregistrez ceci en tant que processeur personnalisé dans le fichier lib/paperclip/your_processor_name.rb, et faire tout ce que le style dont vous avez besoin de style comme ceci:

:original, { geometry: "1500x1500>",      format: :jpg }, 
:medium, { geometry: "650x650#", processors: [:your_processor_name], format: :jpg }, 
:small,  { geometry: "262x262#", processors: [:your_processor_name], format: :jpg } 

L'essentiel est que vous ne pouvez rogner d'un original, donc si vous avez besoin de traitement personnalisé, vous devez construire. Vous devrez jouer avec, mais cela vous mettra sur la bonne voie.

+0

Le fait est que j'ai déjà un processeur en place pour recadrer le ': small' pouce qui fonctionne bien pour les nouveaux téléchargements. Cependant, depuis que j'ai ajouté le style ': small' récemment, il y a plusieurs milliers d'images qui ne l'ont pas, donc j'ai besoin de le générer en utilisant le pouce recadré': medium', pas le ': original pouce (qui n'est pas recadrée). La solution est probablement une sorte de tâche rake ou un processeur personnalisé qui génèrerait le pouce ': small' basé sur le pouce': medium'. – Sbbs

+0

Mais l'original devrait toujours être là, donc tout ce que vous avez à faire est de modifier le processeur pour recadrer et redimensionner les petites images dans une tâche de rake comme vous l'avez dit. Il suffit de trouver toutes les images créées avant de commencer à recadrer les petites et de les passer dans le processeur. –

+0

De plus, si vous modifiez les images de taille moyenne et que quelque chose tourne mal, vous ne pouvez pas l'annuler. Toujours manipuler l'original et enregistrer une copie. –

Questions connexes