1.创建RoundHeadImgUtils工具类

package com.mrd.utils;import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.geom.Ellipse2D;
import java.awt.geom.RoundRectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;/*** 合成圆头像*/
public class RoundHeadImgUtils {/***** @param srcFilePath 源图片文件路径* @param circularImgSavePath 新生成的图片的保存路径,需要带有保存的文件名和后缀* @param targetSize 文件的边长,单位:像素,最终得到的是一张正方形的图,所以要求targetSize<=源文件的最小边长* @param cornerRadius 圆角半径,单位:像素。如果=targetSize那么得到的是圆形图* @return  文件的保存路径* @throws IOException*/public static String makeCircularImg(String srcFilePath, String circularImgSavePath,int targetSize, int cornerRadius) throws IOException {BufferedImage bufferedImage = ImageIO.read(new File(srcFilePath));BufferedImage circularBufferImage = roundImage(bufferedImage,targetSize,cornerRadius);ImageIO.write(circularBufferImage, "png", new File(circularImgSavePath));return circularImgSavePath;}private static BufferedImage roundImage(BufferedImage image, int targetSize, int cornerRadius) {BufferedImage outputImage = new BufferedImage(targetSize, targetSize, BufferedImage.TYPE_INT_ARGB);Graphics2D g2 = outputImage.createGraphics();g2.setComposite(AlphaComposite.Src);g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);g2.setColor(Color.WHITE);g2.fill(new RoundRectangle2D.Float(0, 0, targetSize, targetSize, cornerRadius, cornerRadius));g2.setComposite(AlphaComposite.SrcAtop);g2.drawImage(image, 0, 0, null);g2.dispose();return outputImage;}/*** 生成圆角图标* @param image* @param cornerRadius 圆角半径* @return*/public static BufferedImage makeRoundedCorner1(BufferedImage image, int cornerRadius) {int w = image.getWidth();int h = image.getHeight();BufferedImage output = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);Graphics2D g2 = output.createGraphics();g2.setComposite(AlphaComposite.Src);g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);g2.setColor(Color.WHITE);g2.fill(new RoundRectangle2D.Float(0, 0, w, h, cornerRadius, cornerRadius));g2.setComposite(AlphaComposite.SrcAtop);g2.drawImage(image, 0, 0, null);g2.dispose();return output;}/**图片圆角处理,背景透明化* @param srcImageFile 原图片* @param result  处理后图片* @param type   图片格式* @param cornerRadius  720为圆角*/public  void makeRoundedCorner(File srcImageFile, File result, String type, int cornerRadius) {try {BufferedImage bi1 = ImageIO.read(srcImageFile);// 根据需要是否使用 BufferedImage.TYPE_INT_ARGBBufferedImage image = new BufferedImage(bi1.getWidth(), bi1.getHeight(),BufferedImage.TYPE_INT_ARGB);Ellipse2D.Double shape = new Ellipse2D.Double(0, 0, bi1.getWidth(), bi1.getHeight());Graphics2D g2 = image.createGraphics();image = g2.getDeviceConfiguration().createCompatibleImage(bi1.getWidth(), bi1.getHeight(), Transparency.TRANSLUCENT);g2 = image.createGraphics();g2.setComposite(AlphaComposite.Clear);g2.fill(new Rectangle(image.getWidth(), image.getHeight()));g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC, 1.0f));g2.setClip(shape);// 使用 setRenderingHint 设置抗锯齿g2 = image.createGraphics();g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);g2.fillRoundRect(0, 0,bi1.getWidth(), bi1.getHeight(), cornerRadius, cornerRadius);g2.setComposite(AlphaComposite.SrcIn);g2.drawImage(bi1, 0, 0, bi1.getWidth(), bi1.getHeight(), null);g2.dispose();ImageIO.write(image, type, result);} catch (Exception e) {// TODO: handle exception}}}

2.创建测试类 RoundTest

package com.mrd.test;import com.mrd.utils.RoundHeadImgUtils;import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;/*** 720正圆形* 40是圆角形*/
public class RoundTest {public static void main(String[] args) {try {BufferedImage image = ImageIO.read(new File("原图片路径"));BufferedImage rounded = RoundHeadImgUtils.makeRoundedCorner1(image, 720);ImageIO.write(rounded, "png", new File("生成后的图片路径"));} catch (IOException e) {e.printStackTrace();}}
}

转载:https://blog.csdn.net/qq_19714937/article/details/68631829

java工具类-java实现 生成圆头像相关推荐

  1. Java工具类 —— Java POI 4.X 的Excel基本操作

    Excel报表操作在日常办公和生活中应用非常广泛,今天我们来看看Java是怎么操作Excel的. 先分享一下工具类:工具类ExcelOperators,点击下载 欢迎下载使用,更希望自己动动手,写一下 ...

  2. java工具类-java仿微信九宫格头像

    创建Utils类 ImageUtil package com.mrd.utils;import javax.imageio.ImageIO; import java.awt.Color; import ...

  3. Java工具类--雪花算法生成全局唯一ID

    import java.lang.management.ManagementFactory; import java.net.InetAddress; import java.net.NetworkI ...

  4. 腾讯开放平台接口鉴权(计算签名)工具类 java版

    腾讯开放平台 接口鉴权(签名)工具类 java版 用到了Hutool工具类 package top.seasmall.platform.core.config.nettyws.util;import ...

  5. Java工具类实现word转pdf结果几乎一模一样

    Background [封装好的工具类][转换效果99%][无水印] 实现技术[Aspose] 这里给出需要的依赖包 aspose-words-15.8.0.jar和word-license.xml, ...

  6. (6)常用的Java工具类

    目录 前言: 第一部分:常用的16个工具类 一.org.apache.commons.io.IOUtils 二.org.apache.commons.io.FileUtils 三.org.apache ...

  7. RSA加密算法介绍及Java工具类

    一.RSA加密算法介绍 当今重要的三类加密算法:非对称加密.对称加密以及哈希算法(HASH严格说不是加密算法,但由于其不可逆性,已成为加密算法中的一个重要构成部分). 1976年以前,所有的加密方法都 ...

  8. elasticsearch搜索引擎查询java工具类

    Elasticsearch查询java工具类 项目组使用Elasticsearch搜索引擎也有一段时间了,刚开始是2.4版本,现在又要在新的工程中使用,准备升级为5.4版本,以前的工具类也不好用了,没 ...

  9. Java工具类——DES加密和解密工具 I

    可以指定不同的密钥对同一字符串进行不同的加密操作,增强加密性能. package com.app; import java.security.Key; import java.security.Sec ...

最新文章

  1. MySQL数据库实用教程考核_《MySQL数据库实用教程》郑明秋,蒙连超,赵海侠【pdf】...
  2. Keywords Search AC自动机QAQ
  3. 好货不能错过!一款在GitHub上22k+star的人力资源管理系统
  4. mysql给数据做排名_mysql给数据统计做排名
  5. Nginx版本无缝升级
  6. 思考一个问题:如何重现主从备份失败的案例
  7. ssh-keygen 的 详解
  8. Linux ulimit命令(控制shell执行程序的资源、并发)
  9. python文件输入符_python基础入门详解(文件输入/输出 内建类型 字典操作使用方法)...
  10. FTP文件传输协议之vsftpd服务
  11. eclipse svn下载并转为maven项目
  12. Python数据分析学习系列 十四 数据分析案例
  13. Java中类和对象的区别
  14. 如何打造成功的数据归档策略
  15. windows 编程的学习次序
  16. python爬虫系列之下载在线文档Excel(石墨)
  17. 华为 eNSP 打开警告:请将eNSP相关应用程序添加到windows firewall的允许程序列表,并允许其在公用网络上运行!
  18. 即使是个收外卖的前台小妹,也要时刻想着如何咸鱼翻身
  19. 计算机集成制造系统 刊物界别,基于多传感器的高速CNC机床集成监控系统设计.pdf...
  20. Excel VBA属性、方法、事件大全——Part7(Complete List of Excel VBA attribute/method and event)

热门文章

  1. 下载神器v1.0.9磁力搜索下载支持在线播放自定义搜索源投屏解析速度不错
  2. 【NLP】1分钟理清文本纠错框架pycorrector
  3. 内网用户如何下载BT资源?BT转HTTP下载
  4. 山东春季高考计算机可以报考的本科学校,山东春季高考可以报考的本科学校
  5. SpringBoot 集成 Caffeine(咖啡因)最优秀的本地缓存
  6. 蓝桥杯Python-2n皇后问题(和别人的想法有点不一样)
  7. android气泡飞舞,泡泡向前冲攻略彩色泡泡漫天飞舞
  8. HTML的块级元素(常用整理)
  9. TextView文字左右对齐
  10. C++数字转字符串 to_string()