Avrunding hjørner av bilder med ImageMagick

stemmer
8

i min Rails app jeg vil ha en lignende profil seksjon som Facebook hvor opplastede bilder blir automatisk miniatyr og hjørne avrundet. Jeg bruker convertverktøyet til å bygge ned bilder til miniatyrbilder, men er det et alternativ å runde hjørnene også? Takk.

Publisert på 05/04/2009 klokken 03:56
kilden bruker
På andre språk...                            


4 svar

stemmer
4

Her er noen avrundede hjørner eksempler: http://www.imagemagick.org/Usage/thumbnails/#rounded_border . Du må lage en maske av noe slag (enten for hånd eller ved hjelp av tegneverktøy) og legg så over den på bildet.

Svarte 05/04/2009 kl. 04:04
kilden bruker

stemmer
7

Facebook endrer ikke bilder for å ha avrundede hjørner. I stedet bruker de HTML og CSS for å bruke dette bildet i løpet av hver bruker bilde: http://www.facebook.com/images/ui/UIRoundedImage.png

Hvis du inspisere UIRoundedImage.png, vil du finne at hver "torget" består av en gjennomsiktig sentrum, og ugjennomsiktig hjørner som er ment å matche bakgrunnen som brukeren Bildet vil hvile. For eksempel, hvis brukeren bildet er på en hvit bakgrunn, så hvite ugjennomsiktige avrundede hjørner vil legges over på brukerens bildet.

CSS teknikk for å bruke bare en bestemt del av UIRoundedImage.pngdet som kalles "CSS sprites". Du kan lese mer om det her: http://www.alistapart.com/articles/sprites/

Svarte 05/04/2009 kl. 04:32
kilden bruker

stemmer
0

Her er koden jeg skrev å runde hjørner med ImageMagick bruke Perl. Det bør port til Ruby ganske enkelt:

http://article.gmane.org/gmane.comp.video.graphicsmagick.apis/322

Svarte 07/02/2011 kl. 23:24
kilden bruker

stemmer
9

universell løsning

Denne løsningen fungerer med transparente og ikke-transparente bilder. For å legge til 15 piksler radius avrundede hjørner til original_picture.pngsom er et 100x100 bilde:

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

Denne løsningen ble gitt av PM her: https://stackoverflow.com/a/1916256/499917

Elegant løsning, fungerer ikke med gjennomsiktige bilder

Denne løsningen fungerer uten noen mellomliggende bilde. Så fint! Men det vil forstyrre din opprinnelige bildet gjennomsiktighet. Så bruk bare når du er sikker på at bildet ikke er gjennomsiktig.

Tenk deg at du vil ha avrundede hjørner med 15px radius:

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

For enkelhets skyld, her er hva du vanligvis gjør i Ruby eller noen andre språk:

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}`

Kilde: http://www.imagemagick.org/Usage/thumbnails/#rounded

Svarte 24/09/2013 kl. 21:17
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more