java后台拼接9宫格头像和添加水印文字,效果:

     

参考:https://blog.csdn.net/shichen88/article/details/101293541

1、拼接工具类:

package com.bai.blog.utils.files;

import javax.imageio.ImageIO;

import java.awt.*;

import java.awt.geom.AffineTransform;

import java.awt.geom.RoundRectangle2D;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;

import java.util.ArrayList;

import java.util.List;

/**

* 拼接图片 参考:https://blog.csdn.net/shichen88/article/details/101293541

* FileName: FileSplitUtil

* Create by: 漠天

* Date: 2019/12/23

*/

public class FileSplitUtil {

/**

* 合成图片

*

* @param imagePaths List* @param message String

* @param outPutPath String

* @throws IOException

* return String

*/

public static String overlapImage(ListimagePaths, String message, String outPutPath) throws IOException {

int withAndHeight = 530;//背景图片的宽高

int dividerWithAndHeight = 20;//divider分割空白宽高

int sonImageWithAndHeight = 150;//画的子头像图片的宽高

int sonImageRadius= 30;//画的子头像的圆角

// 设置背景图片大小,自己添加替换图片逻辑

// BufferedImage backgroundImage = resizeImage(566, 230, ImageIO.read(new File(backgroundPath)));

//new一个白色背景板

BufferedImage backgroundImage = new BufferedImage(withAndHeight,withAndHeight,BufferedImage.TYPE_INT_ARGB);

backgroundImage.getGraphics().setColor(Color.white);

backgroundImage.getGraphics().fillRect(0,0,withAndHeight,withAndHeight);

backgroundImage.getGraphics().dispose();

backgroundImage = setClip(backgroundImage,30);

// 初始化有效的图片BufferedImage列表

ListbufferedImageList = new ArrayList<>();

for(String imagePath:imagePaths){

bufferedImageList.add(setClip(resizeImage(sonImageWithAndHeight, sonImageWithAndHeight, ImageIO.read(new File(imagePath))),sonImageRadius));

}

// 获取背景画布

Graphics2D graphics = backgroundImage.createGraphics();

// 在背景图片上添加文字

graphics.setColor(Color.blue);

graphics.setFont(new Font("宋体", Font.PLAIN, 20));

graphics.drawString(message, sonImageWithAndHeight/3, sonImageWithAndHeight/3);

// 画出旋转的文字,在指定位置

Font font = new Font("宋体", Font.PLAIN, 80);

AffineTransform affineTransform = new AffineTransform();

affineTransform.rotate(-Math.toRadians(45), 50, 20);

Font rotatedFont = font.deriveFont(affineTransform);

graphics.setFont(rotatedFont);

graphics.drawString(message, sonImageWithAndHeight, withAndHeight-sonImageWithAndHeight);

// 在背景图片上添加子图片

if(bufferedImageList.size()>0){

if(bufferedImageList.size()<2){

graphics.drawImage(bufferedImageList.get(0), dividerWithAndHeight, dividerWithAndHeight, withAndHeight-dividerWithAndHeight*2, withAndHeight-dividerWithAndHeight*2, null);

}else if(bufferedImageList.size()<3){

int newSonWidth = withAndHeight/2-dividerWithAndHeight*2;

int centerPlex =(withAndHeight-newSonWidth)/2;

graphics.drawImage(bufferedImageList.get(0), dividerWithAndHeight+dividerWithAndHeight/2, centerPlex, newSonWidth, newSonWidth, null);

graphics.drawImage(bufferedImageList.get(1), newSonWidth+dividerWithAndHeight*2+dividerWithAndHeight/2, centerPlex, newSonWidth, newSonWidth, null);

}else if(bufferedImageList.size()<10){

for(int i=0;i

2、调用:

ListformatFilePath = new ArrayList<>();

formatFilePath.add("D:/JavaLibFiles/Files/1.png");

formatFilePath.add("D:/JavaLibFiles/Files/2.png");

formatFilePath.add("D:/JavaLibFiles/Files/3.png");

formatFilePath.add("D:/JavaLibFiles/Files/4.png");

formatFilePath.add("D:/JavaLibFiles/Files/5.png");

formatFilePath.add("D:/JavaLibFiles/Files/6.png");

formatFilePath.add("D:/JavaLibFiles/Files/7.png");

String outPutPath = "D:/JavaLibFiles/Files/splitImage.png";

String message = "测试拼接信息";

String splitResultImagePath = FileSplitUtil.overlapImage(formatFilePath,message,outPutPath);

// 结果地址:splitResultImagePath

9宫格 java_java 拼接头像9宫格相关推荐

  1. java 拼接头像9宫格

    java后台拼接9宫格头像和添加水印文字,效果:       参考:https://blog.csdn.net/shichen88/article/details/101293541 1.拼接工具类: ...

  2. Excel技能培训-INDIRECT实现拼接动态引用单元格,trl+pageDown速切换工作簿,多工作表求和,多个工作簿合并和拆分

    1. 使用INDIRECT实现拼接动态引用单元格内容 =INDIRECT("E"&COUNTA(G14:G17)) 2. 使用ctrl+pageUp ,ctrl+pageD ...

  3. 模拟后宫oracle攻略,模拟后宫(Haramase Simulator)_模拟后宫安卓版下载-我的世界中文网...

    软件介绍 模拟后宫是一款由欧美制作的有着明显的日系风格的一款精美RPG游戏,这款游戏中的环峰完全模仿了日系动漫的风格,非常的精美,当然了游戏的剧情也是非常的不错的,而且玩法多样话,非常的自由.喜欢的朋 ...

  4. Excel 中拼接多个单元格内容的方法

    第一步,打开需要拼接多个单元格内容的表格 第二步,在E2单元格输入[=A2&B2&C2&D2]即可得到拼接后的结果 第三步,单击E2单元格右下角并往下拉,向下引用,单元格则自动 ...

  5. opencl4格环视拼接Beta0.5

    opencl4格环视拼接Beta0.5 文章目录 opencl4格环视拼接Beta0.5 *以下内容是单一输入的4格环视拼接,用于进行基础讲解 :* 1.opencl中kernel通过 get_glo ...

  6. cxgrid中纵横单元格合并_被合并单元格折磨疯的我,真后悔没早点知道这个Excel技巧!...

    在大家日常的工作中,经常会用到Excel合并单元格,然而合并单元格其实只是美化了表格,它会使我们后续的统计工作遇到很多麻烦,今天就给大家提供两个解决这个问题的思路. 01 合并单元格的基本操作方法 在 ...

  7. vba字典合并单元格为空_VBA合并单元格求和处理套路

    在Excel中,合并单元格的使用会带来相当令人不爽的麻烦.但其使用率还是蛮高的. 如图,需要对部门的销售额做总计. Sub 樱桃小丸子() Dim arr, d As Object, i&, ...

  8. Datagridview 去掉单元格焦点虚框 和设置单元格不能被选中

    去掉单元格焦点虚框和设置单元格不能被选中 private void kDGV_ghd_RowPrePaint(object sender, DataGridViewRowPrePaintEventAr ...

  9. 设置单元格填充方式_单元格的选择及设置单元格格式

    数据输入完毕,接下来可以设置字体.对齐方式.添加边框和底纹等方式设置单元格格式,从而美化工作表.要对单元格进行设置,首先要选中单元格. 选择单元格 选择单元格是指在工作表中确定活动单元格以便在单元格中 ...

最新文章

  1. 性能优化之Java(Android)代码优化
  2. LeetCode 90. 子集 II(回溯+剪枝)
  3. 一次Nginx负载均衡的安装与配置
  4. 知识图谱入门2-1:实践——基于医疗知识图谱的问答系统
  5. AndroidStudio_安卓原生开发_保存全局数据---Android原生开发工作笔记141
  6. POJ 2492 A Bug's Life (带权并查集 向量偏移)
  7. NOIP模拟赛20161016R2
  8. 斐波那契堆的C++实现
  9. 奇异矩阵及广义逆矩阵
  10. 自学python在电脑上安装什么杀毒软件好_电脑上装那个杀毒软件比较好?
  11. Python导入数据
  12. 【C语言入门简单程序】三子棋——新手轻松学
  13. win10 Asus 家庭版 电脑初始设置相关
  14. 干货!如何在训练中自动识别数据中潜在的不同分布并自适应?——以空间数据为例,应用不限于空间数据...
  15. 报表生成器FastReport .Net注册数据教程
  16. Java 平衡二叉树之单旋(左旋,右旋)与双旋
  17. 手机触摸pass测试软件,PaperPass手机版
  18. 二维数组实现n阶方阵
  19. 新一代三维GIS技术白皮书v1.0
  20. IOS截屏,View截图的基本方法

热门文章

  1. 活动安排问题--贪心算法
  2. 【转载】优酷网首席执行官兼创始人古永锵演讲
  3. C# Task的简单使用
  4. 数字签名时间戳服务器的原理 !
  5. SQL SERVER 2005 进行XML查询
  6. NHibernate介绍
  7. 计算机主机漏电,电脑机箱漏电怎么办?机箱电源漏电原因及解决方法
  8. redis根据通配符去批量删除指令
  9. postman发送post请求,服务器日志确保GET请求错误“ PageNotFound:208 Request method ‘GET‘ not supported”
  10. YOLO系列算法精讲:从yolov1至yolov4的进阶之路(呕心沥血2万字超全整理,建议收藏!)