在我的Rails应用程序中,我希望有一个类似于Facebook的个人资料部分,上传的图像会自动缩略并圆角处理。我正在使用convert
实用程序将图像缩小为缩略图,但是否有选项可以将它们的角落也变成圆形?谢谢。
在我的Rails应用程序中,我希望有一个类似于Facebook的个人资料部分,上传的图像会自动缩略并圆角处理。我正在使用convert
实用程序将图像缩小为缩略图,但是否有选项可以将它们的角落也变成圆形?谢谢。
通用解决方案
该解决方案适用于透明和非透明图片。要将15像素半径的圆角添加到100x100像素大小的图片original_picture.png
中:
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
这个解决方案是由PM在这里提供的:https://dev59.com/qHI-5IYBdhLWcg3wVWli#1916256
优雅的解决方法,无法处理透明图片
此解决方案无需任何中间图片即可实现效果。很好!但它会破坏原始图片的透明度。因此,请仅在您确定您的图片不透明时使用。
假设您想要半径为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
为方便起见,以下是你通常在Ruby或其他一些语言中要做的:
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}`
http://article.gmane.org/gmane.comp.video.graphicsmagick.apis/322