java 海报二: 如何生成圆形头像

直接上代码
//测试头像
String url = "https://thirdwx.qlogo.cn/mmopen/vi_32/ibwibmjniabu5JFwMl1Ju5drHnibjmiafckIjvfYLLjK3mwAiaHdsQVGmBkQyq7PPDLllAedicE27F4WclNLVkGwaZiaKQ/132";
BufferedImage avatarImage = ImageIO.read(new URL(url));
int width = 120;
// 透明底的图片
BufferedImage formatAvatarImage = new BufferedImage(width, width, BufferedImage.TYPE_4BYTE_ABGR);
Graphics2D graphics = formatAvatarImage.createGraphics();
//1、把图片切成一个圓
{
    graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    //留一个像素的空白区域,这个很重要,画圆的时候把这个覆盖
    int border = 1;
    //图片是一个圆型
    Ellipse2D.Double shape = new Ellipse2D.Double(border, border, width - border * 2, width - border * 2);
    //需要保留的区域
    graphics.setClip(shape);
    graphics.drawImage(avatarImage, border, border, width - border * 2, width - border * 2, null);
    graphics.dispose();
}
String test1 = "E:\\java\\pros\\test1.jpg";
ImageIO.write(formatAvatarImage, "PNG", new File(test1));

//2、在圆图外面再画一个圆
{
    //新创建一个graphics,这样画的圆不会有锯齿
    graphics = formatAvatarImage.createGraphics();
    graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    int border = 3;
    //画笔是4.5个像素,BasicStroke的使用可以查看下面的参考文档
    //使画笔时基本会像外延伸一定像素,具体可以自己使用的时候测试
    Stroke s = new BasicStroke(4.5F, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND);
    graphics.setStroke(s);
    graphics.setColor(Color.WHITE);
    graphics.drawOval(border, border, width - border * 2, width - border * 2);
    graphics.dispose();
}
String test2 = "E:\\java\\pros\\test2.jpg";
ImageIO.write(formatAvatarImage, "PNG", new File(test2));

//3、合成到背景图上
{
    url = "https://img-blog.csdn.net/20180529213113521";
    BufferedImage srcImg = ImageIO.read(new URL(url));
    //scrImg加载完之后没有任何颜色
    BufferedImage blankImage = new BufferedImage(srcImg.getWidth(), srcImg.getHeight(), BufferedImage.TYPE_INT_RGB);
    graphics = blankImage.createGraphics();
    graphics.drawImage(srcImg, 0, 0, null);

    int x = (blankImage.getWidth() - width) / 2;
    int y = (blankImage.getHeight() - width) / 2;
    graphics.drawImage(formatAvatarImage, x, y, width, width, null);
    graphics.dispose();
    String test3 = "E:\\java\\pros\\test3.jpg";
    ImageIO.write(blankImage, "PNG", new File(test3));
}
效果图

1、
在这里插入图片描述
2、
在这里插入图片描述
3、
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
现场大屏幕具有开幕墙、闭幕墙、消息墙、抽奖、签到、嘉宾展示、抢红包功能,利用开幕墙对整个活动的展示介绍、也适合活动进行中的间歇时间、消息墙可以再等待和互动的时候,让员工发布消息,是/一款非常流行的微信大屏幕系统。 重要说明:付费报名模式目前只支持开通微信支付的服务号。 1、本模块支持开幕墙、闭幕墙、消息墙、维码扫描墙、3D签到墙(支持logo签到和文字签到)(4种展示效果)、多奖品切换现场抽奖、酷炫互动疯狂抢红包、嘉宾墙等,后续将再新增多个墙,敬请期待; 2、每个大屏幕都支持自定义背景、和背景有音乐功能,购买的客户将免费赠送背景素材包; 3、现场抽奖奖品支持同时设置多个奖品,并且可以设置每个奖品的顺序,方便根据奖品价值安排抽奖顺序,奖品支持实物和红包(); 4、抢红包奖品支持实物、微信卡券、红包等,支持自定义奖品数量、概率等; 5、抢红包支持设置每个人最多中奖次数、超过了就不会再中奖了; 6、抢红包活动支持设置赞助商广告,粉丝的中奖提示页面会弹出赞助广告; 7、抢红包活动支持多波活动举办,支持一波活动结束后直接重置,之前中奖的数据不会被清空,后台和中奖者手机端都可以看到并且兑换红包。 8、红包奖品支持直接发送和提现两种模式,方便做大额红包奖励。 9、3D签到墙支持4种展示方式,前后台都可以自由切换,手机端签到可以支持是/否需要填写个人信息,个人信息支持填写姓名、手机、公司/职位等; 10、大屏幕支持设置密码才能访问的功能; 11、消息墙支持开启是/否需要消息审核的功能,支持同时发生消息和图片的功能,并且支持图片再显示的时候是/否自动放大功能。 12、后台支持自定义活动流程说明,方便参与者再手机端直接查看活动流程。 13、支持开启和关闭强制关注才能参与活动的功能; 14、自带LBS限制地区功能,可以设置参与人的地区范围; 15、本模块只支持认证服务号使用(使用红包功能必须开通微信支付),其他非认证服务号的可以借用权限(借用权限的账号无法使用卡券功能); 运营方案推荐: 【公司年会方案】 使用开幕墙、闭幕墙、消息墙、抽奖、签到、嘉宾展示、抢红包功能,利用开幕墙对整个活动的展示介绍、也适合活动进行中的间歇时间、消息墙可以再等待和互动的时候,让员工发布消息。签到墙采用水晶球模式。 整个年会设置多波抢红包活动,利用抢红包重置功能,可以举办多波互动抢红包,既能引爆现场,又能回馈员工福利。 现场抽奖功能可以把奖品依次从低到高设置,把价值最高的放最后面。 【本地自媒体现场活动】 使用开幕墙、闭幕强、抢红包功能,开幕墙和闭幕墙可以做成赞助商广告墙,利用抢红包的高互动功能,并且可以举办多波的功能,快速引爆活动现场。 适用范围 微信墙、超级大屏幕、微信大屏幕、现场大屏幕 1、本地自媒体大号,拉商家赞助; 2、公司年会、学校、企事业单位等等; 3、微信运营服务提供商; 4、婚礼策划机构

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值