如何利用Java在图片上添加文字水印效果

 更新时间:2022年01月14日 11:52:58   作者:zyqok  
最近发现经常被别的网站盗用,而且不注明出处,因此不得不加上水印,这篇文章主要给大家介绍了关于如何利用Java在图片上添加文字水印效果的相关资料,需要的朋友可以参考下

前言

今天分享一个:通过Java代码,给图片添加文字。

比如下面这个图片,我们在左下角就添加了一个文字版的水印,那么这是如何实现的呢 ?

【1】获取原图片对象

首先,第一步,肯定是要让我们的程序,拿到需要处理的图片。

我们程序获取图片的方式,通常有两种,一种是通过下载到本地,从本地读取;另外一种就是通过网络地址进行获取。

(1.1)读取本地图片

比如,我们将图片下载到了我们计算机本地(E:\imgs目录下),那么我们直接在main函数中,通过下面这段代码,就可以获取到图片对象。

// 读取图片文件
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);
System.out.println("图片宽度:" + image.getWidth() + " px");
System.out.println("图片高度:" + image.getHeight() + " px");

 代码效果如下:

(1.2)读取网络图片

如果图片是一个网络图片,我们可以直接获取它的地址进行下载,相关代码如下(网络图片的名称和类型,取决于下载者)。

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(不懂RGBA的点这里),四个参数的范围均是0-255;

(2)pen.setFont(new Font("微软雅黑", Font.ITALIC, 20));

Font.PLAIN(正常),Font.BOLD(粗体),Font.ITALIC(斜体)

【3】添加文字水印

下面这行代码就是添加文字水印的核心代码。

// 这三个参数分别为你的文字内容,起始位置横坐标(px),纵坐标位置(px)。
pen.drawString("我是图片水印", 30, 550);

(3.1)如何确定水印位置 ?

首先,大家要明白,我们在说图片上的坐标,它一个表示法,具体如下:

那么,我们如何确定我们水印的图片其实坐标呢?

我们可以将图片首先保存到本地,然后右键单击,选择画图工具类打开它。

 打开后,我们将鼠标光标移动到我们需要添加文字的地方(如红色箭头处),则底部就会显示对应位置的坐标(蓝色箭头处),那么这个坐标我们就可以拿到,然后写入到程序代码里了。

【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);
        ImageIO.write(image, "png", fos);
    }
}

总结

到此这篇关于如何利用Java在图片上添加文字水印效果的文章就介绍到这了,更多相关Java图片加文字水印内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring中过滤器(Filter)和拦截器(Interceptor)的区别和联系解析

    Spring中过滤器(Filter)和拦截器(Interceptor)的区别和联系解析

    在我们日常的开发中,我们经常会用到Filter和Interceptor,这篇文章主要介绍了Spring中过滤器(Filter)和拦截器(Interceptor)的区别和联系 ,需要的朋友可以参考下
    2022-10-10
  • Java随机生成字符串的四种方式例子

    Java随机生成字符串的四种方式例子

    这篇文章主要给大家介绍了关于Java随机生成字符串的四种方式,随机数在实际中使用很广泛,比如要随即生成一个固定长度的字符串、数字,文中给出了详细的代码示例,需要的朋友可以参考下
    2023-10-10
  • 详解netty中常用的xml编码解码器

    详解netty中常用的xml编码解码器

    这篇文章主要介绍了netty中常用的xml编码解码器,进行frame拆分可以使用XmlFrameDecoder,进行xml文件内容的解析则可以使用XmlDecoder,接下来我们会详细讲解两个decoder实现和使用,感兴趣的朋友一起看看吧
    2022-05-05
  • MyBatis批量添加、修改和删除

    MyBatis批量添加、修改和删除

    本文给大家分享mybatis批量添加,修改,删除的实例代码,本文代码简单易懂,对mybatis 批量添加、修改及删除相关知识感兴趣的朋友一起学习吧
    2016-01-01
  • java编程实现获取服务器IP地址及MAC地址的方法

    java编程实现获取服务器IP地址及MAC地址的方法

    这篇文章主要介绍了java编程实现获取机器IP地址及MAC地址的方法,实例分析了Java分别针对单网卡及多网卡的情况下获取服务器IP地址与MAC地址的相关技巧,需要的朋友可以参考下
    2015-11-11
  • SWT(JFace)体验之StackLayout布局

    SWT(JFace)体验之StackLayout布局

    SWT(JFace)体验之StackLayout布局实现代码。
    2009-06-06
  • java.io.NotSerializableException异常的问题及解决

    java.io.NotSerializableException异常的问题及解决

    这篇文章主要介绍了java.io.NotSerializableException异常的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Spring Security 图片验证码功能的实例代码

    Spring Security 图片验证码功能的实例代码

    spring security是一系列的过滤器链,所以在这里验证码也声明为过滤器,加在过滤器链的 登录过滤器之前,然后自定义一个异常类,来响应验证码的错误信息.这篇文章主要介绍了Spring Security 图片验证码,需要的朋友可以参考下
    2018-03-03
  • JAVA8之函数式编程Function接口用法

    JAVA8之函数式编程Function接口用法

    这篇文章主要介绍了JAVA8之函数式编程Function接口用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • IDEA使用properties配置文件进行mysql数据库连接的教程图解

    IDEA使用properties配置文件进行mysql数据库连接的教程图解

    Properties类是 键和值均为字符串的可以永久存储到文件中的key-value集合。这篇文章主要介绍了IDEA使用properties配置文件进行mysql数据路连接 ,需要的朋友可以参考下
    2018-10-10

最新评论