Come faccio ad applicare un ombra per le miniature utilizzando ImageMagick e graffetta?
-
19-09-2019 - |
Domanda
Vorrei modificare il trattamento dei miniature nella graffetta avendo ImageMagick applicare un'ombra esterna a tutte le miniature. Quello che mi sono bloccato sulla è il comando effettivo imagemagick che tirare fuori questo piccolo miracolo off. Tutto quello che ho provato restituisce un ombra in modo non corretto scala senza l'immagine originale.
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
Una Ho provato ...
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
Sono completamente nuovo per ImageMagick, qualsiasi aiuto sarebbe molto apprezzato.
Soluzione
Dopo alcuni tentativi ed errori e seppellire la testa nella documentazione, ho finalmente capito.
has_attached_file :image,
:styles => { :thumb => ["100x100#", :png] },
:convert_options => { :thumb => '\( +clone -background black -shadow 70x4+0+0 \) +swap -background none -layers merge +repage' }
- Assicurati di avere l'ultima versione di ImageMagick installato.
- [ "100x100 #",: png]. Converte l'immagine in PNG così l'ombra è trasparente
- In Opzioni convert,: il pollice si applicherà solo la conversione alla: stile del pollice, utilizzare:. Tutto per applicare la conversione a tutti i vostri stili
- Tweak "70x4 + 0 + 0" per ottenere l'ombra che si desidera.
Altri suggerimenti
Lo trovo molto più facile da utilizzare solo l'interfaccia RMagick piuttosto che l'invio di opzioni della riga di comando per ImageMagick sé.
Se si utilizza RMagick è possibile utilizzare il metodo di ombra.
img = Image.read('slide.png').first
shadow = img.shadow(0, 0, 0.0, '20%')
e quindi composito dell'immagine sopra l'ombra.
ho scritto un articolo sull'uso RMagick: http://schf.uc.org/articles/2006/10/18/render-greatlooking-collages-with-ruby-and-rmagick
Prova a leggerlo su di esso potrebbe dare una migliore comprensione.
Ho anche scritto un lib astrazione RMagick che cerca di rendere ancora più facile da usare. L'ho chiamato RubyShop perché ha cercato di imitare il compositing basato strato di photoshop .. (Io odio il nome e probabilmente cambiarlo se mai resuscitare il progetto)