java图片添加水印
最近开发一款卡片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
- 重启tomcat服务器
最后展示效果图:
java图片添加水印相关推荐
- Java图片添加水印工具
Java图片添加水印工具 废话少说,直接上代码: import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font ...
- java 图片添加水印工具
图片添加水印工具类 /** * * */ package utils;import com.util.UnicodeReader;import javax.imageio.ImageIO; impor ...
- java图片添加水印实现自动换行
package com.tgpms.utils;import cn.hutool.core.util.StrUtil;import javax.imageio.ImageIO; import java ...
- Java图片添加水印功能
图片添加水印 需求是需要添加多个斜的水印,如果只是添加单个水印可以参考这个:传送门 直接上代码: private static void waterMarkAdd(String sourceFile, ...
- java图片添加水印文字
jAVA图片中添加文字水印(铺满整个图片) package com.zhuozhengsoft.mark; import java.awt.AlphaComposite; import java.aw ...
- java 图片添加水印(文字水印+图片水印)
一.图片水印(水印文件覆盖到源文件上) /*** @param buffImg 源文件(BufferedImage)* @param waterImg 水印文件(BufferedImage)* @pa ...
- java生成水印_(Java)图片添加水印,生成邀请函
用途说明: 1.可以用于生成自定义的水印 2.可以动态生成邀请函,指定特定对象的姓名.内容 3.可以生成手写书信(这个下载对应的手写字体,安装到电脑就可用了) 源码的功能: 1.提供自定义字体属性(样 ...
- java 给图片添加暗水印_java 实现给图片添加水印
原图如下: 代码如下: package test; import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Fon ...
- JAVA给图片添加水印,java初级面试笔试题
我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...
- java实现word,pdf,excel,图片添加水印
gitee项目地址:https://gitee.com/betelnutandwine/meutilswatermark: java实现pdf,word,excel,ppt,图片加水印 jar地址:s ...
最新文章
- feachall php_timthumb.php详解
- The most important part of the body
- [vue-element]有阅读过ElementUI的源码吗?
- 刚学计算机先学什么好,计算机语言入门先学什么?
- Python开发工程师常用开发工具
- springboot整合mongodb
- sqrt mysql_详解MySQL中的SQRT函数的使用方法_MySQL
- erp系统云端服务器,erp系统软件云服务器
- 软考中高级项目管理案例分析-人力资源管理
- 2022年:企业绩效管理蓝图
- 【JY】西南交通大学柔性防护:边坡地质动力灾害柔性防护仿真
- 使用 arp-scan 快速扫描局域网 IP -> raspberry pi ssh vnc
- Java网上投票系统毕业设计
- File类详解(获取文件名称、大小、路径、创建等)
- Centos 安装docker后 deamo 无法启动的问题 解决
- Python 数学运算库Numpy入门基础(一)创建数组
- 新视野大学英语(第三版)视听说4Unit7必修答案
- 计算机到多重网络,windows7多重网络无法连接到internet最佳解决方法
- 美团java工程师,成都外包面试笔试题
- 魔兽分辨率修改器的C语言实现