如何将多个头像合成类似QQ的群头像?

如上图所示,如何用java将单一的图片合成如上群头像。

在一个正方形外框中,要将多个图片合成上述图片。首先要做的是,依据圆相交的程度,计算圆心坐标与图片间空白区域大小。然后设计不同位置的切割模具,最后再将切割好的单一图片,在最终承载的图片上的指定位置绘制出来,即可完成整个合并过程。

参考代码如下:

private String exe5(List urls) throws IOException {

int size = 220, wihteSize = 15;

int x = 130, y = 0;

BufferedImage imageNew = new BufferedImage(480, 480, BufferedImage.TYPE_INT_ARGB);

Graphics2D graphics2DNew = imageNew.createGraphics();

imageNew = graphics2DNew.getDeviceConfiguration().createCompatibleImage(480, 480, Transparency.TRANSLUCENT);

graphics2DNew.dispose();

graphics2DNew = imageNew.createGraphics();

graphics2DNew.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

for(int i = 0; i < urls.size(); i++) {

String fileName = urls.get(i);

Area tempArea = new Area();

Ellipse2D.Double circle0 = new Ellipse2D.Double(wihteSize, wihteSize, size - 2 * wihteSize, size - 2 * wihteSize);

if (i == 0) {

Ellipse2D.Double circle1 = new Ellipse2D.Double(-130, 112, size, size);

tempArea.add(new Area(circle0));

tempArea.subtract(new Area(circle1));

} else if (i == 1) {

Ellipse2D.Double circle1 = new Ellipse2D.Double(53, 148, size, size);

tempArea.add(new Area(circle0));

tempArea.subtract(new Area(circle1));

} else if(i == 2) {

Ellipse2D.Double circle1 = new Ellipse2D.Double(153, 0, size, size);

tempArea.add(new Area(circle0));

tempArea.subtract(new Area(circle1));

} else if(i == 3) {

Ellipse2D.Double circle1 = new Ellipse2D.Double(53, -148, size, size);

tempArea.add(new Area(circle0));

tempArea.subtract(new Area(circle1));

} else {

Ellipse2D.Double circle1 = new Ellipse2D.Double(-130, -112, size, size);

tempArea.add(new Area(circle0));

tempArea.subtract(new Area(circle1));

}

graphics2DNew.drawImage(drawImage(fileName, size, tempArea), x, y, null);

if(i == 0) {

x = 0;

y = 112;

} else if (i == 1) {

x = 54;

y = 260;

} else if (i == 2) {

x = 207;

y = 260;

} else if (i == 3) {

x = 260;

y = 112;

} else {

x = 260;

y = 112;

}

}

graphics2DNew.dispose();

……

}

/**

* 往模具中填充图片

* @param fileName

* @param size

* @return

* @throws IOException

*/

private BufferedImage drawImage(String fileName, int size, Area area) throws IOException {

BufferedImage bufferedImage = zipImage(fileName, size);

BufferedImage tempBufferImage = new BufferedImage(size, size, BufferedImage.TYPE_INT_ARGB);

Graphics2D g2d = tempBufferImage.createGraphics();

tempBufferImage = g2d.getDeviceConfiguration().createCompatibleImage(size, size, Transparency.TRANSLUCENT);

g2d.dispose();

g2d = tempBufferImage.createGraphics();

g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

g2d.setClip(area);

g2d.fill(area);

g2d.drawImage(bufferedImage, 0, 0, null);

g2d.dispose();

return tempBufferImage;

}

合成之后的图片会有一定的毛刺,但是缩小看之后,就无法分辨出来。因此,在客户端进行展示的时候,取缩略图就可以满足需求。

java图片合成_Java图片处理(一)图片合成相关推荐

  1. java ppt 转图片格式_Java PPT(X)转图片、PDF和SVG

    (一)简介: 工作中,PowerPoint文档有时需要被转换为PDF/图像文件来存档.因为PDF或图片的页面布局是固定的,很难被修改且能被大多数设备打开,所以PDF或者图片比起PowerPoint格式 ...

  2. java 简单图片浏览器_Java实现简单的图片浏览器

    第一次写博客,不喜勿喷. 最近一个小师弟问我怎么用Java做图片浏览器,感觉好久没玩Java了,就自己动手做了一下. 学校的教程是用Swing来做界面的,所以这里也用这个来讲. 首先要做个大概的界面出 ...

  3. java保存当前页面为图片大小_java用BufferedImage转换图片大小并保存

    java用BufferedImage转换图片大小并保存,保存的图片总是一片黑色 程序实现将一个图片缩小成256*256像素图片并保存,源图片为jpg格式,但是每次转换后存在文件夹中的文件均为一片黑色, ...

  4. java graphics2d旋转_JAVA用Graphics2D实现图片旋转,缩放,合成

    第一步:读入文件 public BufferedImage loadImageLocal(String path) { try { return ImageIO.read(new File(path) ...

  5. java怎么将加载图片消除_Java中加载图片的方法

    Java中添加图片,我知道有两种方法 用new ImageIcon("地址")函数,将图片放到JLabel中,然后把JLabel放到需要的地方就可以了 ImageIcon bg=n ...

  6. ckeditor java 上传_java使用CKEditor实现图片上传功能

    java如何使用ckeditor实现图片上传功能,具体内容如下 1.根据实际需要下载指定的ckeditor 2.删除文件ckeditor/plugins/image/dialogs/image.js预 ...

  7. java swing背景_java swing 设置背景图片的方法一

    下面是偶写着玩的下测试的代码:(不好之处,请多多指教,大家共同进步 ) import java.awt.*; import javax.swing.*; public class ImageDemo ...

  8. java 图片加密_java 对视频和图片进行加密解密[转]

    是时候回到文件加密与解密的具体实现这个主题上来了.后续的举例均采用图片(包括GIF动画)类型,而其他类型资源的实现原理相同,就不一一给出了.首先来看对一幅JPG类型图片进行异或加密的Java实现,由于 ...

  9. Java服务器上显示图片问题_java,_服务器读取图片到jsp显示问题,java - phpStudy

    服务器读取图片到jsp显示问题 我要从服务器读个图片显示到jsp jsp页面 后台 @RequestMapping(value = "getPic", method = Reque ...

  10. java下载网站图片代码_java下载网上的图片到本地

    public class TestImgJsoup { /** * @param urlPath * 图片路径 * @throws Exception */ public void getImages ...

最新文章

  1. tarjan算法不是很懂先mark一下。
  2. 计算机语言主要由一些指令组成这些指令包括,(计算机组成指令系统汇编语言.ppt...
  3. 实验四 Android程序设计
  4. 超全!嵌入式必懂的CAN总线一文讲通了
  5. 图片 过度曝光_解读:摄影初学者,如何理性处理“曝光不足”与“曝光过度”...
  6. openfilename 选择文件夹_这个软件能帮你1秒内搜索文件夹中的东西
  7. c++ helloworld_《Linux设备驱动程序》(二)——Hello World
  8. Spring boot web开发实战
  9. 【经验】使用Oracle的SQL Developer创建用户方法
  10. Tortoise svn 基础知识
  11. 个人业务网站php源码,最新个人发卡网源码,PHP运营级个人自动发卡平台完整源码...
  12. IB中文诗歌手法分析
  13. 常用优化网页加载速度方法
  14. ES新建模板时的错误 Client error: `PUT http://127.0.0.1:9200/_template/tmp` resulted in a `400 Bad Request`
  15. android Stopwatch实例
  16. 2022-08-15 第四小组 修身课 学习笔记(every day)
  17. 东半球空间环境地基综合监测子午链——子午工程
  18. 关于Java自己记不住和不知道的知识点
  19. WMI Provider Host占用CPU过高
  20. 对象数组排序,利用jquery

热门文章

  1. 移动磁盘数据错误循环冗余检查的文件找回方法
  2. 一哥答疑,如何面对繁杂的数据需求?
  3. 2021金山wps校招(前端)
  4. 阿里高频面试题:如何快速判断元素是不是在集合里?
  5. 微型计算机使用的键盘shift,微型计算机使用的键盘中,shift键称为什么
  6. 《皮囊》中读出的人生哲学
  7. VIVADO中使用BD时,常用的IP
  8. Eclipse中使用SQL server 2008数据库以及实现eclipse与数据库的连接和操作数据库
  9. 四级单词pdf_英语单词里的字母到底有没有含义?
  10. windows slim read/write lock 原理剖析