JAVA在图片上设置水印图片(源码+注释详解)

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

import javax.imageio.ImageIO;
import javax.swing.*;
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 Timg
 * @Date 2022/1/22 15:51
 * @Email w16638771062@163.com
 */
public class Timg {
    public static void main(String[] args) {
        //源图片路径
        String st1 = "C:\\Users\\w1663\\Pictures\\Camera Roll\\img.png";
        //水印图片路径
        String st2 = "C:\\Users\\w1663\\Pictures\\Camera Roll\\sy.png";
        //目标图片路径
        String st3 = "C:\\Users\\w1663\\Pictures\\Camera Roll\\img4.png";
        //水印图片旋转度
        Integer xz = 90;
        timg(st1, st2, st3, xz);

    }

    public static void timg(String st1, String st2, String st3, Integer xz) {
        try {
            //读取源图片信息
            var m = ImageIO.read(new File(st1));
            //创建画布
            BufferedImage img = new BufferedImage(m.getWidth(), m.getHeight(), BufferedImage.TYPE_INT_ARGB);
            //创建画笔
            var g = img.createGraphics();
            //将源图片信息画入画布
            g.drawImage(m, 0, 0, m.getWidth(), m.getHeight(), null);
            //设置对线段的锯齿状边缘处理
            g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
            //新建图标对象读取水印图片
            ImageIcon imageIcon = new ImageIcon(st2);
            //获取图标的图片
            Image image = imageIcon.getImage();
            //设置图标的透明度
            g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 0.5f));
            //设置图标位置
            int x = img.getWidth() - image.getWidth(null) - 10;
            int y = img.getHeight() - 10;
            //判断旋转角度是否为空进行旋转
            if (xz != null) {
                g.rotate(Math.toDegrees(xz), img.getWidth() - image.getWidth(null) / 2 - 10, img.getHeight() - image.getHeight(null) / 2 - 10);
            }
            //将图标画入画布中
            g.drawImage(image, x, y - image.getHeight(null), null);
            //将图标和源图片结合
            g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));
            //清空画笔
            g.dispose();
            //建立写入流目标图片对象
            FileOutputStream out = new FileOutputStream(st3);
            //将画布信息传入文件中
            ImageIO.write(img, "png", out);


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

    }
}


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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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