admin 管理员组文章数量: 1184232
一、效果展示
水印123如下图
1.可以自定义(类型:汉字、数字都支持)
2.可以定位指定位置
二、前提说明
-
实现添加水印功能中Windows服务器和Linux服务器的区别是:
Windows自带字体库,而Linux不带,如果是数字类型水印,区别不大,汉字的话,Windows正常显示,Linux显示口口口这样的 -
Windows的字体库资源不需要网上下载,找到
C:\Windows\Fonts目录下,选择想用的字体资源即可,字体资源后缀是.ttc文件,与Linux服务器通用 -
下面有两种实现方法:1自带字体库(Windows),2引入字体库,区别是
Font的生成方式不同 - 字体库的引入可以放到项目里面,也可以放到服务器指定文件夹
- 文件只能是图片才能加水印
-
颜色推荐使用
Color.GRAY
三、Windows自带字体库实现方法
packagecom.joolun.cloud.common.core.util;importjava.awt.Color;importjava.awt.Font;importjava.awt.Graphics2D;importjava.awt.image.BufferedImage;importjava.io.File;importjava.io.InputStream;importjavax.imageio.ImageIO;publicclassWaterMarkUtils{/**
* 图片添加水印
*
* @param imgFile
* 需要添加水印的图片
* @param markContentColor
* 水印文字的颜色
* @param waterMarkContent
* 水印的文字
* @return 水印图片
*/publicstaticFilemarkStr(File imgFile,Color markContentColor,String waterMarkContent){try{// 加水印BufferedImage bufImg =ImageIO.read(imgFile);int width = bufImg.getWidth();//图片宽int height = bufImg.getHeight();//图片高Graphics2D g = bufImg.createGraphics();
g.drawImage(bufImg,0,0, width, height,null);Font font =newFont("微软雅黑",Font.ITALIC,45);
g.setColor(markContentColor);// 根据图片的背景设置水印颜色
g.setFont(font);int x = width -2*getWatermarkLength(waterMarkContent, g);//这是一个计算水印位置的函数,可以根据需求添加int y = height -1*getWatermarkLength(waterMarkContent, g);System.out.println("水印位置x="+x);System.out.println("水印位置y="+y);
g.drawString(waterMarkContent, x, y);
g.dispose();ImageIO.write(bufImg,"png", imgFile);return imgFile;}catch(Exception e){
e.printStackTrace();}returnnull;}/**
* 获取水印文字总长度
*
* @param waterMarkContent
* 水印的文字
* @param g
* @return 水印文字总长度
*/publicstaticintgetWatermarkLength(String waterMarkContent,Graphics2D g){return g.getFontMetrics(g.getFont()).charsWidth(waterMarkContent.toCharArray(),0, waterMarkContent.length());}}四、引入字体库实现方法
packagecom.joolun.cloud.common.core.util;importjava.awt.Color;importjava.awt.Font;importjava.awt.Graphics2D;importjava.awt.image.BufferedImage;importjava.io.File;importjava.io.InputStream;importjavax.imageio.ImageIO;publicclassWaterMarkUtils{/**
* 图片添加水印
*
* @param imgFile
* 需要添加水印的图片
* @param markContentColor
* 水印文字的颜色
* @param waterMarkContent
* 水印的文字
* @return 水印图片
*/publicstaticFilemarkStr(File imgFile,Color markContentColor,String waterMarkContent){try{// 加水印BufferedImage bufImg =ImageIO.read(imgFile);int width = bufImg.getWidth();//图片宽int height = bufImg.getHeight();//图片高Graphics2D g = bufImg.createGraphics();
g.drawImage(bufImg,0,0, width, height,null);try(//这个/fonts/simsun.ttc可以是在项目中,也可以是在服务器指定文件中InputStream fontFile =WaterMarkUtils.class.getResourceAsStream("/fonts/simsun.ttc")){Font font =Font.createFont(Font.PLAIN, fontFile).deriveFont(Font.BOLD,10f);
g.setColor(markContentColor);// 根据图片的背景设置水印颜色
g.setFont(font);}int x = width -2*getWatermarkLength(waterMarkContent, g);//这是一个计算水印位置的函数,可以根据需求添加int y = height -1*getWatermarkLength(waterMarkContent, g);System.out.println("水印位置x="+x);System.out.println("水印位置y="+y);
g.drawString(waterMarkContent, x, y);
g.dispose();ImageIO.write(bufImg,"png", imgFile);return imgFile;}catch(Exception e){
e.printStackTrace();}returnnull;}/**
* 获取水印文字总长度
*
* @param waterMarkContent
* 水印的文字
* @param g
* @return 水印文字总长度
*/publicstaticintgetWatermarkLength(String waterMarkContent,Graphics2D g){return g.getFontMetrics(g.getFont()).charsWidth(waterMarkContent.toCharArray(),0, waterMarkContent.length());}}版权声明:本文标题:一文在手,Windows和Linux服务器上的水印加法无需愁,字体资源大公开 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1770956014a3539476.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论