上一篇 介绍了Java合成方形群头像的方法,方形群头像由于易于定位且不涉及形状填充和拼接,实现起来相对简单,本篇介绍的圆形头像方案则复杂很多。
先看一下圆形头像的样子

从例子可以看出有如下几个特性:
- 每张图片都是圆形的,涉及图片的剪切和图片填充到形状
- 当图片的个数多于1时,就要考虑图片的遮盖。
- 图片个数多余1时,需考虑图片的位置:2个是正对角线方向,3、4、5分别是正三角形、正四边形和正五边形
接下来,从上面的三点介绍:
图片的形状填充
在Java图形库(java.awt)中,存在图片形状填充的API,提供了Area工具,通过Area可以方便的实现图片的填充. Area 类可以根据指定的 Shape 对象创建区域几何形状。如果 Shape 还不是封闭的,则显式地封闭几何形状。由 Shape 的几何形状指定的填充规则(奇偶或缠绕)用于确定得到的封闭区域。
Area填充
步骤如下:
- 创建Shape
- 创建Area
- 建立画板,设置与Area的交集
- 绘制待填充的图片
1 | int objectImageSize = 260; |
见上面的结果:
Area剪切
Area可以实现区域的交集、并集、互减和组合区域并减去其交集, 本例使用Area互减实现圆形的互减。下面演示
实现月牙形状
1 | Ellipse2D.Double circle1 = new Ellipse2D.Double(50, 50, 200, 200); |
看效果

圆形头像
接下来实现圆形头像,基本上就是图片的定位,亲,高中几何学的怎么样?
图形Item坐标信息
1 | public class ItemConfig { |
计算坐标
1 | ItemConfig itemConfig = new ItemConfig(); |
绘制圆形头像
1 | ItemConfig itemConfig = calcLocation(480, 5); |
效果上面已经有了…
参考文献: