JAVA在图片上添加文字水印(源码+注释详解)

举报
桃花键神 发表于 2022/04/17 12:37:25 2022/04/17
【摘要】 JAVA在图片上添加文字水印(源码+注释详解)
package suiyin;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * @author yeqv
 * @program A2
 * @Classname Wimg
 * @Date 2022/1/22 14:57
 * @Email w16638771062@163.com
 */
public class Wimg {
    //文字水印
    public static void main(String[] args) {
        //要添加水印的图片
        File file = new File("C:\\Users\\w1663\\Pictures\\Camera Roll\\img.png");
        //添加完水印输出的图片

        String file1 = "C:\\Users\\w1663\\Pictures\\Camera Roll\\img1.png";
        //水印文字
        String st = "你好中国";
        //文字颜色
        var color = new Color(112, 211, 11, 180);
        wimg(file, file1, st, color);

    }

    public static void wimg(File file, String file1, String st, Color color) {
        try {
            //读取图片信息
            Image t = ImageIO.read(file);
            //读取图片的宽度
            int w = t.getWidth(null);
            //读取图片的高度
            int h = t.getHeight(null);

            //建立画布开始绘画
            BufferedImage bufferedImage = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
            //建立画笔
            Graphics2D graphics2D = bufferedImage.createGraphics();
            //将原图片的信息画入画布
            graphics2D.drawImage(t, 0, 0, w, h, null);
            //设置字体属性
            Font font = new Font("宋体", Font.PLAIN, 40);
            //设置画笔颜色
            graphics2D.setColor(color);
            //设置画笔字体属性
            graphics2D.setFont(font);
            //获取水印的指标
            var fm = graphics2D.getFontMetrics(font.deriveFont(40f));
            //设置字体坐标
            int x = w - fm.stringWidth(st) - 10;
            int y = h - 20;
            //将水印画上
            graphics2D.drawString(st, x, y);
            //清空画笔释放资源
            graphics2D.dispose();
            //建立写入文件流
            FileOutputStream out = new FileOutputStream(file1);
            //将画布内容写入到目标文件中,格式为PNG
            ImageIO.write(bufferedImage, "png", out);
            //清空缓冲区
            out.flush();
            //关闭缓冲区
            out.close();

        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。