在我的 Rails 应用程序中,我希望有一个类似 Facebook 的个人资料部分,其中上传的图像会自动缩略图和圆角。我正在使用该convert
实用程序将图像缩小为缩略图,但是否也可以选择圆角?谢谢。
4 回答
通用解决方案
此解决方案适用于透明和非透明图片。添加 15 像素半径的圆角original_picture.png
是 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
这个解决方案是由PM在这里给出的:https ://stackoverflow.com/a/1916256/499917
优雅的解决方案,不适用于透明图片
此解决方案无需任何中间图片即可工作。多好!但这会破坏您原始图片的透明度。所以只有当你确定你的图片不透明时才使用。
假设您想要半径为 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}`
Facebook 不会将图片修改为圆角。相反,他们使用 HTML 和 CSS 将此图像应用于每个用户图片: http: //www.facebook.com/images/ui/UIRoundedImage.png
如果你检查UIRoundedImage.png
,你会发现每个“正方形”都由一个透明的中心和不透明的角组成,这些角与用户图片所在的背景相匹配。例如,如果用户图片位于白色背景上,则白色不透明圆角将覆盖在用户图片上。
仅使用特定部分的 CSS 技术UIRoundedImage.png
称为“CSS sprites”。你可以在这里阅读更多关于它的信息:http ://www.alistapart.com/articles/sprites/
以下是一些圆角示例:http ://www.imagemagick.org/Usage/thumbnails/#rounded_border 。您需要创建某种蒙版(手动或使用绘图工具),然后将其覆盖到您的图像上。
这是我使用 Perl 使用 ImageMagick 编写的圆角代码。它应该很容易移植到 Ruby:
http://article.gmane.org/gmane.comp.video.graphicsmagick.apis/322