URL url = new URL("https://zyq2022.oss-cn-chengdu.aliyuncs.com/test.png");
BufferedImage image = ImageIO.read(url.openStream());
System.out.println("图片宽度:" + image.getWidth() + " px");
System.out.println("图片高度:" + image.getHeight() + " px");
代码效果如下:
【2】创建画笔
经过上面的描述,我们已经获取到了原始图片,接下来我们还需要创建一个画笔,后面我们写出的文字样式,完全则由它来决定。它可以设置颜色,字体大小,字体样式等。
// 创建画笔(image为上一步的图片对象)
Graphics2D pen = image.createGraphics();
// 设置画笔颜色为白色
pen.setColor(Color.WHITE);
// 设置画笔字体样式为微软雅黑,斜体,文字大小为20px
pen.setFont(new Font("微软雅黑", Font.ITALIC, 20));
(1) pen.setColor(Color.WHITE);
这行代码的意思是将画笔颜色设置为白色。
其他颜色还有:WHITE(白色)、LIGHT_GRAY(浅灰色)、GRAY(灰色)、DARK_GRAY(深灰色)、BLACK(黑色)、RED(红色)、PINK(粉红色)、ORANGE(橘黄色)、YELLOW(黄色)、GREEN(绿色)、MAGENTA(紫红色)、CYAN(青色)、BLUE(蓝色)
如果上面颜色都不满足你,或者你还想设置下字体透明度,你可以改为如下格式:
pen.setColor(new Color(179, 250, 233, 100));
这里的四个参数分别为 RGBA(),四个参数的范围均是0-255;
(2)pen.setFont(new Font(“微软雅黑”, Font.ITALIC, 20));
Font.PLAIN(正常),Font.BOLD(粗体),Font.ITALIC(斜体)
【3】添加文字水印
下面这行代码就是添加文字水印的核心代码。
// 这三个参数分别为你的文字内容,起始位置横坐标(px),纵坐标位置(px)。
pen.drawString("我是图片水印", 30, 550);
首先,大家要明白,我们在说图片上的坐标,它一个表示法,具体如下:
那么,我们如何确定我们水印的图片其实坐标呢?
我们可以将图片首先保存到本地,然后右键单击,选择画图工具类打开它。
打开后,我们将鼠标光标移动到我们需要添加文字的地方(如红色箭头处),则底部就会显示对应位置的坐标(蓝色箭头处),那么这个坐标我们就可以拿到,然后写入到程序代码里了。
【4】获取处理图片
经过上面三次操作后,我们的图片添加文字就已经处理完成了,但他现在还保存在Java对象中,我们需要将他保存到本地,我们才能看得到效果(如:这里我将处理的图片保存到 test2.png 中)。
// 创建新图片文件
File file = new File("E:/imgs/test2.png");
// 将处理好的图片数据写入到新图片文件中
FileOutputStream fos = new FileOutputStream(file);
ImageIO.write(image, "png", fos);
最后执行代码,我们看到在原图片文件夹下,多了一个 test2.png 的图片。
我们打开 test2.png 图片后,可以看到文字水印已经添加成功了。
【5】源代码
最后将前面解读的整个源码放在下面,供大家参考:
package com.zyq.util;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
public class ImgTest {
public static void main(String[] args) throws IOException {
// 读取本地图片文件
// File file = new File("E:/imgs/test.png");
// System.out.println("图片名称:" + file.getName());
// System.out.println("图片大小:" + file.length() / 1024 + " kb");
// 将文件对象转化为图片对象
// BufferedImage image = ImageIO.read(file);
// 获取网络图片
URL url = new URL("https://zyq2022.oss-cn-chengdu.aliyuncs.com/test.png");
BufferedImage image = ImageIO.read(url.openStream());
// 创建画笔
Graphics2D pen = image.createGraphics();
// 设置画笔颜色为白色
// pen.setColor(Color.WHITE);
pen.setColor(new Color(179, 250, 233, 200));
// 设置画笔字体样式为微软雅黑,斜体,文字大小为20px
pen.setFont(new Font("微软雅黑", Font.ITALIC, 20));
// 写上水印文字和坐标
pen.drawString("我是图片水印", 30, 550);
// 创建新图片文件
File file = new File("E:/imgs/test2.png");
// 将处理好的图片数据写入到新图片文件中
FileOutputStream fos = new FileOutputStream(file);
# 总结
上述知识点,囊括了目前互联网企业的主流应用技术以及能让你成为“香饽饽”的高级架构知识,每个笔记里面几乎都带有实战内容。
**很多人担心学了容易忘,这里教你一个方法,那就是重复学习。**
打个比方,假如你正在学习 spring 注解,突然发现了一个注解@Aspect,不知道干什么用的,你可能会去查看源码或者通过博客学习,花了半小时终于弄懂了,下次又看到@Aspect 了,你有点郁闷了,上次好像在哪哪哪学习,你快速打开网页花了五分钟又学会了。
从半小时和五分钟的对比中可以发现多学一次就离真正掌握知识又近了一步。

人的本性就是容易遗忘,只有不断加深印象、重复学习才能真正掌握,所以很多书我都是推荐大家多看几遍。哪有那么多天才,他只是比你多看了几遍书。
了解详情https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB
ect,不知道干什么用的,你可能会去查看源码或者通过博客学习,花了半小时终于弄懂了,下次又看到@Aspect 了,你有点郁闷了,上次好像在哪哪哪学习,你快速打开网页花了五分钟又学会了。
从半小时和五分钟的对比中可以发现多学一次就离真正掌握知识又近了一步。
[外链图片转存中...(img-QeZNdDiM-1724447447945)]
人的本性就是容易遗忘,只有不断加深印象、重复学习才能真正掌握,所以很多书我都是推荐大家多看几遍。哪有那么多天才,他只是比你多看了几遍书。
了解详情https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB
因篇幅问题不能全部显示,请点此查看更多更全内容