本文介绍java实现在图片上加文字水印的方法,水印可以是图片或者文字,操作方便。
java实现给图片添加水印实现步骤:
-
获取原图片对象信息(本地图片或网络图片) -
添加水印(设置水印颜色、字体、坐标等) -
处理输出目标图片
一、java实现给图片添加文字水印
1.获取原图片对象信息
第一步:获取需要处理的图片
获取图片的方式,通常由两种:
-
一种是通过下载到本地,从本地读取(本地图片); -
另外一种是通过网络地址进行读取(网络图片)
1.1 读取本地图片

通过代码实现读取本地目录(F:image1.png)下图片,代码如下:
importjavax.imageio.ImageIO;
importjava.awt.*;
importjava.awt.image.BufferedImage;
importjava.io.File;
importjava.io.FileOutputStream;
importjava.io.IOException;
/***图片添加水印*@authorqzz*/
public class ImageUtils {
public static void main(String[] args) throws IOException {
//读取原图片信息得到文件(本地图片)
File srcImgFile = newFile("F:/image/1.png");
// 将文件对象转化为图片对象
Image srcImg = ImageIO.read(srcImgFile);
// 获取图片的宽
int srcImgWidth = srcImg.getWidth(null);
// 获取图片的高
int srcImgHeight = srcImg.getHeight(null);
System.out.println("图片的宽:" + srcImgWidth);
System.out.println("图片的高:" + srcImgHeight);
// 创建一个URL对象,获取网络图片的地址信息(网络图片)//
URL url = newURL("https://pngimg.com/distr/img/ukraine.png");
// //将URL对象输入流转化为图片对象(url.openStream()方法,获得一个输入流)
Image srcImg = ImageIO.read(url.openStream());////获取图片的宽
int srcImgWidth = srcImg.getWidth(null);////获取图片的高
int srcImgHeight = srcImg.getHeight(null);
System.out.println("图片的宽:" + srcImgWidth);
System.out.println("图片的高:" + srcImgHeight);
BufferedImage bufImg = new BufferedImage(srcImgWidth, srcImgHeight, BufferedImage.TYPE_INT_RGB);
// 加水印//创建画笔
Graphics2D g = bufImg.createGraphics();
绘制原始图片g.drawImage(srcImg, 0, 0, srcImgWidth, srcImgHeight, null);
// -------------------------文字水印start----------------------------//
// 根据图片的背景设置水印颜色
g.setColor(newColor(255, 255, 255, 128));//
// 设置字体画笔字体样式为微软雅黑,加粗,文字大小为60pt
g.setFont(newFont("微软雅黑", Font.BOLD, 60));
String waterMarkContent = "图片来源:https://image.baidu.com/";
//设置水印的坐标(为原图片中间位置)
int x = (srcImgWidth - getWatermarkLength(waterMarkContent, g)) / 2;
int y = srcImgHeight / 2;
// 画出水印第一个参数是水印内容,第二个参数是x轴坐标,第三个参数是y轴坐标
g.drawString(waterMarkContent, x, y);
g.dispose();
// -------------------------文字水印end----------------------------//-------------------------图片水印start----------------------------
// 水印文件
// String waterMarkImage="F:/image/s.png";
ImagesrcWaterMark = ImageIO.read(newFile(waterMarkImage));
// 获取水印图片的宽度
intwidthWaterMark = srcWaterMark.getWidth(null);
// 获取水印图片的高度
intheightWaterMark = srcWaterMark.getHeight(null);
// 设置 alpha 透明度:alpha 必须是范围[0.0, 1.0]之内(包含边界值)的一个浮点数字
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 0.9f));
// 绘制水印图片坐标为中间位置
g.drawImage(srcWaterMark, (srcImgWidth - widthWaterMark) / 2, (srcImgHeight - heightWaterMark) / 2, widthWaterMark, heightWaterMark, null);
// 水印文件结束
g.dispose();
// -------------------------图片水印end----------------------------//待存储的地址
String tarImgPath = "F:/image/t.png";
// 输出图片
FileOutputStreamoutImgStream = newFileOutputStream(tarImgPath);
ImageIO.write(bufImg, "png", outImgStream);
System.out.println("添加水印完成");
outImgStream.flush();
outImgStream.close();
}
// /***获取水印文字的长度*@paramwaterMarkContent
// *@paramg
// *@return*/
public static int getWatermarkLength(String waterMarkContent, Graphics2D g) {
return g.getFontMetrics(g.getFont()).charsWidth(waterMarkContent.toCharArray(), 0, waterMarkContent.length());
}
}
}
3.代码执行效果

t.png图片文件中 含有 水印图片,说明 图片水印添加成功!
来源:blog.csdn.net/qq_26383975/
article/details/125996277
构建高质量的技术交流社群,欢迎从事编程开发、技术招聘HR进群,也欢迎大家分享自己公司的内推信息,相互帮助,一起进步!
文明发言,以
交流技术、职位内推、行业探讨为主
广告人士勿入,切勿轻信私聊,防止被骗

本篇文章来源于微信公众号: Java笔记虾
微信扫描下方的二维码阅读本文

Comments NOTHING