最近开发一款卡片app,但上传到服务器的卡片中有一种是图片相同,只是文字不同,为了减少UI工作量,通过图片加水印的方式在后台将文字添加到图片上,并将合成的图片上传到服务器,如下是整个实现过程:
首先是工具类:

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;import javax.imageio.ImageIO;public class WaterMarkUtils {/*** @param srcImgPath 源图片路径* @param tarImgPath 保存的图片路径* @param waterMarkContent 水印内容*/public static boolean addWaterMark(String srcImgPath, String tarImgPath, String waterMarkContent) {try {// 读取原图片信息File srcImgFile = new File(srcImgPath);//得到文件Image srcImg = ImageIO.read(srcImgFile);//文件转化为图片int srcImgWidth = srcImg.getWidth(null);//获取图片的宽int srcImgHeight = srcImg.getHeight(null);//获取图片的高// 加水印BufferedImage bufImg = new BufferedImage(srcImgWidth, srcImgHeight, BufferedImage.TYPE_INT_RGB);Graphics2D g = bufImg.createGraphics();g.drawImage(srcImg, 0, 0, srcImgWidth, srcImgHeight, null);Color color = Color.white;g.setColor(color);   //根据图片的背景设置水印颜色Font font = new Font("黑体", Font.PLAIN, 32);g.setFont(font);              //设置字体// 一行14个位置,超出部分进行换行int page = (int) Math.ceil((double)waterMarkContent.length()/14);for (int i = 0; i < page; i++) {String sub = null;if ((i+1)*14 < waterMarkContent.length()) {sub = waterMarkContent.substring(i*14, (i+1)*14);} else {sub = waterMarkContent.substring(i*14, waterMarkContent.length());}g.drawString(sub, 70, 340+i*48); // 画文字}g.dispose();  // 输出图片  FileOutputStream outImgStream = new FileOutputStream(tarImgPath);  ImageIO.write(bufImg, "png", outImgStream);outImgStream.flush();  outImgStream.close();  } catch (Exception e) {e.printStackTrace();return false;}System.out.println("添加水印完成");  return true;}public static void main(String[] args) {String srcImgPath="C:/Users/18702/Desktop/素材/cba/1.png"; //源图片地址String tarImgPath="C:/Users/18702/Desktop/素材/cba/2.png"; //待存储的地址String waterMarkContent="今天是个好日子啊今天又是充满希望的一天!今天是个好日子啊今天又是充满希望的一天!今天是个好日子啊今天又是充满希望的一天!";  //水印内容addWaterMark(srcImgPath, tarImgPath, waterMarkContent);}
}

如WaterMarkUtils 所示,只需传三个参数,源图片地址、待存储的地址、文字内容,代码中有详细的注释。
使用时直接调用addWaterMark接口就可以了,注意,如果要将代码部署到linux服务器,你需要确认服务器有添加文字需要的字体。之前一直卡在这一步,本地能正常添加文字,部署到服务器后只显示英语或数字,但中文却不显示了,其解决方案如下:
1.

fc-list                   ----------检查所有已有的字体


如果显示上图所示,则
2.

yum -y install fontconfig                ----------安装字体库

3.打开c盘下的Windows/Fonts目录,将需要的字体复制并上传到服务器/usr/share/fonts/zh_CN目录下,如果没有该目录,可以用mkdir命令进行创建
4.

chmod 766 msyh.ttf                   ----------修改字体权限

5.建立字体缓存

mkfontscale
mkfontdir
fc-cache -fv
  1. 重启tomcat服务器
    最后展示效果图:

java图片添加水印相关推荐

  1. Java图片添加水印工具

    Java图片添加水印工具 废话少说,直接上代码: import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font ...

  2. java 图片添加水印工具

    图片添加水印工具类 /** * * */ package utils;import com.util.UnicodeReader;import javax.imageio.ImageIO; impor ...

  3. java图片添加水印实现自动换行

    package com.tgpms.utils;import cn.hutool.core.util.StrUtil;import javax.imageio.ImageIO; import java ...

  4. Java图片添加水印功能

    图片添加水印 需求是需要添加多个斜的水印,如果只是添加单个水印可以参考这个:传送门 直接上代码: private static void waterMarkAdd(String sourceFile, ...

  5. java图片添加水印文字

    jAVA图片中添加文字水印(铺满整个图片) package com.zhuozhengsoft.mark; import java.awt.AlphaComposite; import java.aw ...

  6. java 图片添加水印(文字水印+图片水印)

    一.图片水印(水印文件覆盖到源文件上) /*** @param buffImg 源文件(BufferedImage)* @param waterImg 水印文件(BufferedImage)* @pa ...

  7. java生成水印_(Java)图片添加水印,生成邀请函

    用途说明: 1.可以用于生成自定义的水印 2.可以动态生成邀请函,指定特定对象的姓名.内容 3.可以生成手写书信(这个下载对应的手写字体,安装到电脑就可用了) 源码的功能: 1.提供自定义字体属性(样 ...

  8. java 给图片添加暗水印_java 实现给图片添加水印

    原图如下: 代码如下: package test; import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Fon ...

  9. JAVA给图片添加水印,java初级面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  10. java实现word,pdf,excel,图片添加水印

    gitee项目地址:https://gitee.com/betelnutandwine/meutilswatermark: java实现pdf,word,excel,ppt,图片加水印 jar地址:s ...

最新文章

  1. feachall php_timthumb.php详解
  2. The most important part of the body
  3. [vue-element]有阅读过ElementUI的源码吗?
  4. 刚学计算机先学什么好,计算机语言入门先学什么?
  5. Python开发工程师常用开发工具
  6. springboot整合mongodb
  7. sqrt mysql_详解MySQL中的SQRT函数的使用方法_MySQL
  8. erp系统云端服务器,erp系统软件云服务器
  9. 软考中高级项目管理案例分析-人力资源管理
  10. 2022年:企业绩效管理蓝图
  11. 【JY】西南交通大学柔性防护:边坡地质动力灾害柔性防护仿真
  12. 使用 arp-scan 快速扫描局域网 IP -> raspberry pi ssh vnc
  13. Java网上投票系统毕业设计
  14. File类详解(获取文件名称、大小、路径、创建等)
  15. Centos 安装docker后 deamo 无法启动的问题 解决
  16. Python 数学运算库Numpy入门基础(一)创建数组
  17. 新视野大学英语(第三版)视听说4Unit7必修答案
  18. 计算机到多重网络,windows7多重网络无法连接到internet最佳解决方法
  19. 美团java工程师,成都外包面试笔试题
  20. 魔兽分辨率修改器的C语言实现

热门文章

  1. C语言 utf8 gbk 互转
  2. 点云应用——三维空间边界点排序+机器人轨迹引导(1)
  3. 微信小程序人脸识别获取照片,并解决相机拍照在ios上有声音问题
  4. .json格式转为.yml格式
  5. USB免驱接触式FM4442卡ISO7816读写器S3-BMU-A0函数使用规则
  6. 印象笔记支持Markdown语法
  7. java + concat_Java中concat()方法和加号(+)运算符之间的区别
  8. 分析EOF究竟是什么
  9. 数据结构 哈希表设计
  10. 使用postman测试post类型请求