Comment puis-je appliquer une ombre portée aux vignettes en utilisant ImageMagick et paperclip?
-
19-09-2019 - |
Question
Je voudrais modifier le traitement des vignettes dans paperclip en ayant ImageMagick appliquer une ombre à toutes les vignettes. Ce que je suis coincé sur la commande est ImageMagick réelle qui rassemblerait ce petit miracle au large. Tout ce que j'ai essayé retourne une ombre à l'échelle incorrecte sans l'image d'origine.
def transformation_command
scale, crop = @current_geometry.transformation_to(@target_geometry, crop?)
trans = ""
trans << " -resize \"#{scale}\""
trans << " -crop \"#{crop}\" +repage" if crop
# Apply Drop Shadow
trans << " #{convert_options}" if convert_options?
trans
end
Un j'ai essayé ...
def transformation_command
scale, crop = @current_geometry.transformation_to(@target_geometry, crop?)
trans = ""
trans << " -resize \"#{scale}\""
trans << " -crop \"#{crop}\" +repage" if crop
trans << " \( +clone -background black -shadow 60x5+10+10 \) +swap -background none -layers merge +repage"
trans << " #{convert_options}" if convert_options?
trans
end
Je suis tout à fait nouveau pour ImageMagick, toute aide serait grandement appréciée.
La solution
Après quelques essais et erreurs et enterrer ma tête dans les docs, j'ai finalement compris.
has_attached_file :image,
:styles => { :thumb => ["100x100#", :png] },
:convert_options => { :thumb => '\( +clone -background black -shadow 70x4+0+0 \) +swap -background none -layers merge +repage' }
- Assurez-vous d'avoir la dernière version de ImageMagick installé.
- [ "100x100 #",: .png]. Convertiront l'image au format PNG si l'ombre est transparent
- Sous les options de convertir,: le pouce n'appliquera la conversion au: style pouce, utilisez:. Tout pour appliquer la conversion à tous vos styles
- Tweak "70x4 + 0 + 0" pour obtenir l'ombre que vous voulez.
Autres conseils
Je trouve beaucoup plus facile d'utiliser simplement l'interface rmagick plutôt que les options d'envoi de ligne de commande pour lui-même ImageMagick.
Si vous utilisez rmagick vous pouvez utiliser la méthode d'ombre.
img = Image.read('slide.png').first
shadow = img.shadow(0, 0, 0.0, '20%')
et l'image composite sur l'ombre.
J'ai écrit un article sur l'utilisation rmagick: http://schf.uc.org/articles/2006/10/18/render-greatlooking-collages-with-ruby-and-rmagick
Essayez de le lire sur elle pourrait vous donner une meilleure compréhension.
J'ai aussi écrit un lib d'abstraction pour rmagick qui tente de le rendre encore plus facile à utiliser. Je l'ai appelé RubyShop parce qu'il a essayé d'imiter compositing couche photoshop .. (Je déteste vraiment le nom et changera probablement si je ressuscite jamais le projet)