场景:将一个头像、二维码、文字信息添加到一张背景图片中,将这些信息合成一张图片。

代码已经测试验证。代码中图片自己随意找几张测试即可。

代码:

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.geom.Ellipse2D;
import java.awt.image.BufferedImage;
import java.io.*;/*** @Author : guoyanan* @Title : 图片处理工具类* @Time : 2019/03/25 16:59* @Document : 提供在元素图片中,添加文字和添加图片的功能,图片支持椭圆形显示*/
public class ImageUtils {// 初始化当前类private static ImageUtils imageUtils = new ImageUtils();// Image 工具类private  Graphics2D graphics2D = null;// 原始图片private BufferedImage bufferedImage = null;/*** 懒汉单例模式* @return*/public static ImageUtils getInstance(){return imageUtils;}/***  基础图片初始化,传入作为背景图片的的路径* @param imageUrl* @return* @throws IOException*/public Graphics2D getGraphics2DBaseImage(String imageUrl) throws IOException {InputStream inputStream = new FileInputStream(imageUrl);bufferedImage = ImageIO.read(inputStream);if (inputStream != null) {inputStream.close();graphics2D = bufferedImage.createGraphics();}return graphics2D;}/*** 在图片中添加文字内容* @param content* @param color* @param font* @param x* @param y*/public void  setString(String content, Color color, Font font, Integer x, Integer y){// 图片的默认设置
        graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);// 设置字体的颜色
        graphics2D.setColor(color);// 设置字体、字体大小、字体效果(倾斜,底线等)
        graphics2D.setFont(font);// 设置字体显示的内容和位置
        graphics2D.drawString(content, x, y);}/*** 处理要合并的图片,支持图片椭圆行处理* @param imageUrl* @param x* @param y* @param isEllipse* @throws IOException*/public void setImageLocalShape(String imageUrl, Integer x, Integer y, boolean isEllipse)throws IOException{// 需要处理的图片InputStream inputStreamIcon = new FileInputStream(imageUrl);BufferedImage bufferedImageIcon = ImageIO.read(inputStreamIcon);if (inputStreamIcon != null) {inputStreamIcon.close();}// 判断是否作椭圆处理if(isEllipse) {/*** 在处理合并图片形状时,一定要重新获取下原始图片的Graphics2D类,否则,会出现* 多个图片情况下只能有一个图片合并成功,其他图片不显示的情况* 原因: 实例引用覆盖导致的。调用clip()方法会将原先的图片覆盖导致只处理当前图片的情况*/Graphics2D graphics2DEll = bufferedImage.createGraphics();// 将图片处理为圆形Ellipse2D.Double shape = new Ellipse2D.Double(x, y, bufferedImageIcon.getWidth(), bufferedImageIcon.getHeight());graphics2DEll.clip(shape);graphics2DEll.drawImage(bufferedImageIcon, x, y, null);}else {graphics2D.drawImage(bufferedImageIcon, x, y, null);}}/*** 处理图片的位置和大小图形* @param imageUrl* @param x* @param y* @param width* @param height* @param isEllipse* @throws IOException*/public void setImageLocalShapeSize(String imageUrl, Integer x, Integer y, Integer width, Integer height, boolean isEllipse)throws IOException{// 需要处理的图片InputStream inputStreamIcon = new FileInputStream(imageUrl);BufferedImage bufferedImageIcon = ImageIO.read(inputStreamIcon);if (inputStreamIcon != null) {inputStreamIcon.close();}// 判断是否作椭圆处理if(isEllipse) {/*** 在处理合并图片形状时,一定要重新获取下原始图片的Graphics2D类,否则,会出现* 多个图片情况下只能有一个图片合并成功,其他图片不显示的情况* 原因: 实例引用覆盖导致的。调用clip()方法会将原先的图片覆盖导致只处理当前图片的情况*/Graphics2D graphics2DEll = bufferedImage.createGraphics();// 将图片处理为圆形Ellipse2D.Double shape = new Ellipse2D.Double(x, y, bufferedImageIcon.getWidth(), bufferedImageIcon.getHeight());graphics2DEll.clip(shape);graphics2DEll.drawImage(bufferedImageIcon, x, y, width, height, null);}else {graphics2D.drawImage(bufferedImageIcon, x, y, width, height, null);}}/***  目标图片生成* @param imageUrl* @throws IOException*/public void  targetImage(String imageUrl) throws IOException{// 初始化目标图片的路径OutputStream outputStream = new FileOutputStream(imageUrl);// 生成图片JPEGImageEncoder enc = JPEGCodec.createJPEGEncoder(outputStream);// 将生成图片中添加的信息处理
        enc.encode(bufferedImage);// 释放合并图片占用的资源信息
        graphics2D.dispose();}public static  void main(String[] args){// 获取工具类实例ImageUtils imageUtils = ImageUtils.getInstance();try {// 设置背景图片imageUtils.getGraphics2DBaseImage("F:\\tmp\\yqxr_back.jpg");// 设置字体Color color=new Color(152,99,59);Font font = new Font("微软雅黑", Font.PLAIN, 20);// 添加字体的属性设置String str = "我对你的爱是真的。";imageUtils.setString(str,color,font,175,790);// 设置头像imageUtils.setImageLocalShapeSize("F:\\tmp\\pic.png",310, 635,120,120,true);// 二维码imageUtils.setImageLocalShapeSize("F:\\tmp\\timg.jpg",230, 810,305,307,false);// 图标imageUtils.setImageLocalShape("F:\\tmp\\icon.png",340, 920,false);// 生成图片imageUtils.targetImage("F:\\tmp\\target100.jpg");} catch (IOException e) {e.printStackTrace();}}
}

转载于:https://www.cnblogs.com/gynbk/p/10600337.html

Image合并添加文字内容相关推荐

  1. 怎么用迅捷PDF转换器在线为PDF文件添加文字内容

    电子文档的广泛应用导致PDF格式文件成为办公中少不了的一部分,在日常工作中,我们经常需要在PDF文档中添加文字,例如签名.批注或补充说明等.那么如何才能快速在PDF文件添加文字内容?有什么文档编辑工具 ...

  2. ​图片上怎么添加文字内容?这两个方法请收好

    相信很多小伙伴们在工作中经常需要处理图片吧,有时候需要在图片上添加注释等文字,也就是编辑图片上的文字.那么小伙伴们平时都是使用什么方法来处理呢?最近就有一个小伙伴咨询图片上怎么添加文字内容,其实很简单 ...

  3. CAD画图完成后怎么添加文字内容

    在CAD制图工作中,我们常常需要给绘制的CAD图形添加上文字内容,以便于使CAD图纸详实详尽.那么在CAD画图完成后怎么添加文字内容呢?今天小编就和大家一起讨论一下.演示操作如下: 1.启动CAD看图 ...

  4. 通过Python在健康码,行程卡的截图上添加文字内容,省心省力

    通过Python在健康码,行程卡的截图上添加文字内容,省心省力 最近几年,由于疫情的原因,学校经常要求家长,把健康码,通行卡等截图内容加上学生名字以及家长的名字或者电话号码后,发给学校:如此一来,就要 ...

  5. html怎么把字放在图片上而不把图片设为背景音乐,左边是图片一直在替换,右边显示文字内容并配乐的视频怎么制作?照片制作视频软件...

    小编前段时间看到一个视频蛮有趣的,视频画面左边是几张图片添加了过渡效果切换着播放,右侧则是文字内容,整个视频配有好听的背景音乐.小编之前也就知道在视频的左侧放一张图片右侧加文字并配上背景音乐,这设置了 ...

  6. speedoffice(Word)文字内容怎么添加删除线

    有时,在制作Word文件时,某些文字不能要,但是又不能直接删除清理掉,这时可以通过添加删除线达到效果.那么怎么添加删除线呢? 1.首先,打开Word文档,并选中需要添加删除线的文字内容,如下图: 2. ...

  7. php表格增加一行数据,““vb中数据库内容输出到excel如何把表格第一行合并添加一个大标题...

    excel表格上面和下面都有行怎么在中间添加一行 excel表面和下面都有行怎么在中间添加一行的方法如下: 1.打开要处理的文档, 2.标定位到要插入的位置之后,比如要在2,3行之间插入,就定位到第3 ...

  8. PPT文字内容如何添加删除线

    我们在使用PPT制作文档时,有时候会在文字上用到删除线,这里就用我常用的speedoffice教大家如何添加删除线,一起看看吧. 1.首先,我们运行软件,打开PPT示例文档: 2.然后,选中需要添加删 ...

  9. 批量在文件名的前面添加统一的文字内容前缀

    概要:我们日常整理文件的过程中,经常需要批量地统一在所有文件名前面加上相同的文字内容作为这些文件的前缀.这里给大家讲解一种非常简单快速的方法,能够批量的在所有的文件名的前面添加统一的文字内容前缀.有了 ...

最新文章

  1. MySQL 故障集锦
  2. oracle 2018 版本,Oracle 最新版本变化 转帖
  3. 全网首译 : 初学者终极指南—掌握Scrum敏捷框架—第1章
  4. 预备作业02 20162320刘先润
  5. 如何用Linux的命令正确识别cpu的个数和核数
  6. 《安全测试指南》——信息收集测试【学习笔记】
  7. 项目拆分子工程(简单版)
  8. 因为征信原因,买房的2万定金没了
  9. api es7 删除所有数据_Elasticsearch7.1中文文档-第四章-API约定
  10. JSTL 核心标签库标签共有13个
  11. C语言---双人贪吃蛇
  12. 医学统计学-为什么是个医学生就都要学R语言?
  13. 第一讲 地理信息系统概述
  14. 【Active Learning - 12】一种基于生成对抗网络的二阶段主动学习方法
  15. 【Unity实战100例】Unity屏幕画线,Unity屏幕画图HSJ绘画工具
  16. android车载应用市场,车载市场
  17. 【求锤得锤的故事】Redis锁从面试连环炮聊到神仙打架
  18. 视觉SLAM十四讲 第1-2讲 初识SLAM
  19. 基于极化码(Polar Code)的加密
  20. 京东要如何解决1号店人员问题?网易考拉:我来帮你

热门文章

  1. jdbc代码_凯哥带你从零学大数据系列之数据库篇---第三章:JDBC基础
  2. 针对自动化测试的23种Node.js优秀实践
  3. linux安装运行redis
  4. mysql的时间在cmd的输入格式_获取“System.FormatException:输入字符串的格式不正确。”在日期时间对象插入到MySql数据库...
  5. html怎么添加遮罩层,如何在浏览器窗口上添加一个遮罩层
  6. php 字符串偏移量,注意:PHP中未初始化的字符串偏移量
  7. mysql表误删回复_mysql数据库数据删除怎么恢复
  8. PYTORCH批标准化
  9. 实现字符级的LSTM文本生成
  10. 柑橘黑斑病反射光谱特性与染病果实检测方法研究