nella mia applicazione Rails voglio avere una sezione profilo simile come Facebook, dove le immagini caricate sono thumbnailed e angolo-arrotondato automaticamente. Sto utilizzando il convertprogramma di utilità di ridimensionare le immagini in miniatura, ma c'è la possibilità di arrotondare gli angoli troppo? Grazie.
A completare gli angoli della foto con ImageMagick
Ecco alcuni esempi angoli arrotondati: http://www.imagemagick.org/Usage/thumbnails/#rounded_border . Avrai bisogno di creare una maschera di qualche tipo (a mano o utilizzando gli strumenti di disegno) e poi sovrapporre sul vostro immagine.
Facebook non modificare immagini di avere gli angoli arrotondati. Invece, usano HTML e CSS per applicare questa immagine su ogni immagine utente: http://www.facebook.com/images/ui/UIRoundedImage.png
Se si controlla UIRoundedImage.png, troverete che ogni "piazza" è costituito da un centro trasparente, e gli angoli opachi che sono destinate a corrispondere allo sfondo su cui l'immagine utente riposerà. Per esempio, se l'immagine utente si trova su uno sfondo bianco, poi bianco angoli arrotondati opache saranno sovrapposti sull'immagine dell'utente.
La tecnica CSS per l'utilizzo di solo una parte specifica UIRoundedImage.pngsi chiama "sprite CSS". Si può leggere di più su di esso qui: http://www.alistapart.com/articles/sprites/
Ecco il codice che ho scritto per arrotondare gli angoli con ImageMagick utilizzando Perl. Dovrebbe porta a Ruby abbastanza facilmente:
http://article.gmane.org/gmane.comp.video.graphicsmagick.apis/322
soluzione universale
Questa soluzione funziona con le immagini trasparenti e non trasparenti. Per aggiungere 15 pixel di raggio angoli arrotondati per original_picture.pngi quali è un quadro 100x100:
convert -size 100x100 xc:none -draw "roundrectangle 0,0,100,100,15,15" mask.png
convert original_picture.png -matte mask.png \
-compose DstIn -composite picture_with_rounded_corners.png
Questa soluzione è stata data da PM qui: https://stackoverflow.com/a/1916256/499917
soluzione elegante, non funziona con le immagini trasparenti
Questa soluzione funziona senza alcuna immagine intermedia. Che carino! Ma sarà interrompere la trasparenza del quadro originale. Così utilizzare solo quando si è sicuri che l'immagine non è trasparente.
Si supponga di voler angoli arrotondati con raggio 15px:
convert original_picture.png \
\( +clone -alpha extract \
-draw 'fill black polygon 0,0 0,15 15,0 fill white circle 15,15 15,0' \
\( +clone -flip \) -compose Multiply -composite \
\( +clone -flop \) -compose Multiply -composite \
\) -alpha off -compose CopyOpacity -composite picture_with_rounded_corners.png
Per comodità, ecco quello che in genere si fare in Ruby o di alcune altre lingue:
in_pic = "original_picture.png"
out_pic = "picture_with_rounded_corners.png"
radius = 15
cmd = "convert #{in_pic} \\( +clone -alpha extract " +
"-draw 'fill black polygon 0,0 0,#{radius} #{radius},0 fill white circle #{radius},#{radius} #{radius},0' " +
"\\( +clone -flip \\) -compose Multiply -composite " +
"\\( +clone -flop \\) -compose Multiply -composite " +
"\\) -alpha off -compose CopyOpacity -composite #{out_pic}"
`#{cmd}`













