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

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

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;


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();
        }

    }
}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5710251.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-17
下一篇2022-12-17

发表评论

登录后才能评论

评论列表(0条)

    保存