Comment puis-je appliquer une ombre portée aux vignettes en utilisant ImageMagick et paperclip?

StackOverflow https://stackoverflow.com/questions/1167983

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.

Était-ce utile?

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' }
  1. Assurez-vous d'avoir la dernière version de ImageMagick installé.
  2. [ "100x100 #",: .png]. Convertiront l'image au format PNG si l'ombre est transparent
  3. Sous les options de convertir,: le pouce n'appliquera la conversion au: style pouce, utilisez:. Tout pour appliquer la conversion à tous vos styles
  4. 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)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top