Java给图片添加水印

package com.example.demo;

import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
public class shuiyin {
public static void main(String[] args) throws IOException {
Font font = new Font(“04b_08”, Font.PLAIN, 30);//字体
String sourceImg=“C:\Users\Administrator\Desktop\img\46053511.png”; //源图片地址
String targetImg=“C:\Users\Administrator\Desktop\img\123.jpg”; //新存储的地址
String watermark=“测试水印”;//水印内容
String watermarkUrl=“D:\test\zy.png”;
Color color=new Color(255,255,255,128);
addWatermark(sourceImg, targetImg,watermark, color,font);
markImgMark(watermarkUrl,sourceImg,targetImg);
}

/**
 * 为图片添加图片水印
 * @param watermarkUrl 原图
 * @param source 水印图片
 * @param output 制作完成的图片
 * @return
 * @throws IOException
 */
public static String markImgMark(String watermarkUrl, String source, String output) throws IOException {
    String result = "添加图片水印出错";
    File file = new File(source);
    Image img = ImageIO.read(file);
    int width = img.getWidth(null);//水印宽度
    int height = img.getHeight(null);//水印高
    BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    Graphics2D g = bi.createGraphics();
    g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
    g.drawImage(img.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null);
    ImageIcon imgIcon = new ImageIcon(watermarkUrl);
    Image con = imgIcon.getImage();
    float clarity = 0.6f;//透明度
    g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, clarity));
    g.drawImage(con, 10, 10, null);//水印的位置
    g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));
    g.dispose();
    File sf = new File(output);
    ImageIO.write(bi, "jpg", sf); // 保存图片
    System.out.println("添加图片水印成功");
    return result;
}

/** 设置文字水印
 * @param sourceImg 源图片路径
 * @param targetImg 保存的图片路径
 * @param watermark 水印内容
 * @param color 水印颜色
 * @param font 水印字体
 * @throws IOException
 */
public static void addWatermark(String sourceImg, String targetImg, String watermark,Color color,Font font) throws IOException {
    File srcImgFile = new File(sourceImg);
    Image srcImg = ImageIO.read(srcImgFile);
    int srcImgWidth = srcImg.getWidth(null);
    int srcImgHeight = srcImg.getHeight(null);
    BufferedImage bufImg = new BufferedImage(srcImgWidth, srcImgHeight, BufferedImage.TYPE_INT_RGB);
    Graphics2D g = bufImg.createGraphics();
    g.drawImage(srcImg, 0, 0, srcImgWidth, srcImgHeight, null);
    g.setColor(color);
    g.setFont(font);
    //设置水印的坐标
    int x = srcImgWidth - (g.getFontMetrics(g.getFont()).charsWidth(watermark.toCharArray(), 0, watermark.length())+20);
    int y = srcImgHeight - 25;
    g.drawString(watermark, x, y);  //加水印
    g.dispose();
    // 输出图片
    FileOutputStream outImgStream = new FileOutputStream(targetImg);
    ImageIO.write(bufImg, "jpg", outImgStream);
    System.out.println("添加水印完成");
    outImgStream.flush();
    outImgStream.close();
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值