美文网首页
JAVA-图片加水印功能的实现

JAVA-图片加水印功能的实现

作者: 吃竹子的程序熊 | 来源:发表于2020-03-17 13:41 被阅读0次

图片加水印功能的实现

最近公司需要实现一个图片加水印的功能。

简单看了下需求,因为之前做截图工具的时候,对图片处理稍微做了一些理解,于是就简单的实现了一个为图片加水印的工具类。

先看效果:

  • 原图


    原图
  • 水印图


    加水印后

源代码

import lombok.Setter;
import lombok.SneakyThrows;
import lombok.experimental.Accessors;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.InputStream;
import java.io.OutputStream;

/**
 * 图像加水印工具类
 *
 * @author HanQi [Jpanda@aliyun.com]
 * @version 1.0
 * @since 2020/3/17 9:44
 */
@Accessors(chain = true, fluent = true)
public class ImageMaskHelper {

    private BufferedImage bi;
    private Graphics2D g2;
    private OutputStream out;

    /**
     * 文字颜色
     */
    @Setter
    private Color color = Color.WHITE;
    /**
     * 文字字体
     */
    @Setter
    private Font font = new Font("simhei", Font.BOLD, 30);
    /**
     * 水印间距
     */
    @Setter
    private Integer interval = 160;

    /**
     * 旋转度数
     */
    @Setter
    private Integer rotate = 45;

    /**
     * 图片类型
     */
    @Setter
    private String imageType = "JPEG";

    /**
     * 允许定制Graphics2D
     */
    @Setter
    private Composite composite = AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 0.3F);

    @SneakyThrows
    private ImageMaskHelper(InputStream image) {
        this.bi = ImageIO.read(image);
        this.g2 = bi.createGraphics();
    }

    public static ImageMaskHelper of(InputStream image) {
        return new ImageMaskHelper(image);
    }

    public ImageMaskHelper to(OutputStream outputStream) {
        this.out = outputStream;
        return this;
    }


    @SneakyThrows
    public void doMask(String mask) {
        // 文字旋转
        g2.setColor(color);
        AffineTransform affineTransform = new AffineTransform();
        affineTransform.rotate(Math.toRadians(rotate), 0, 0);
        g2.setFont(font.deriveFont(affineTransform));

        g2.setComposite(composite);

        // 文字宽度
        int fw = g2.getFontMetrics().stringWidth(mask);
        // 文本高度
        int fh = g2.getFontMetrics().getHeight();

        // 计算增量
        int xInc = fw + interval;
        int yInc = fh + interval;

        // 添加水印
        int y = 0;
        do {
            int x = 0;
            do {
                g2.drawString(mask, x, y);
                x += xInc;
            } while (x < bi.getWidth());
            y += yInc;
        } while (y < bi.getHeight());

        g2.dispose();

        if (this.out != null) {
            ImageIO.write(bi, imageType, out);
        }
    }

}

测试代码

// IMAGE 原图
// MASK_IMAGE 加水印后的图片文件
@Test
@SneakyThrows
public void doMask() {
    @Cleanup
    FileInputStream fileInputStream = FileUtils.openInputStream(Paths.get(IMAGE).toFile());
    @Cleanup
    FileOutputStream fileOutputStream = new FileOutputStream(Paths.get(MASK_IMAGE).toFile());

    ImageMaskHelper
            .of(fileInputStream)
            .to(fileOutputStream)
            .color(Color.BLACK)
            .interval(180)
            .rotate(330)
            .imageType("png")
            .doMask("Jpanda.cn");

    fileOutputStream.flush();
}

相关文章

  • JAVA-图片加水印功能的实现

    图片加水印功能的实现 最近公司需要实现一个图片加水印的功能。 简单看了下需求,因为之前做截图工具的时候,对图片处理...

  • 图片添加二维码水印教程

    本博客介绍一下用jdk awt实现图片加文字水印和图片水印的方法 一、图片文字水印 原来图片 加上文字水印后图片 ...

  • 图片加水印

    加文字水印 图片水印 给字体加颜色

  • iOS音视频学习

    GPUImage 可以实现的功能(基于GPU) 视频合成 视频加水印 修改图片 使用GPUImage拍照 录制视频...

  • GPUImage详细解析(八)视频合并混音

    回顾 GPUImage源码解析、图片模糊、视频滤镜、视频水印、文字水印和动态图片水印GPUImage的大多数功能已...

  • Android 上传图片添加水印功能

    近期项目中有给上传的图片添加水印功能,如下图所示 水印图片如下 项目中用到的是的水印覆盖到全部图片的效果,对水印图...

  • 图片加数字水印

    数字水印介绍 常见的图片水印多是在图片上附上文字、logo等信息,可以直观地看出来,除了这种水印外,好可以给图片加...

  • ios绘图实列

    1> 水印PPT简介 * 图片水印作用:防止他人盗取图片,加一些Logo,生成一张新的图片。 * 怎么生成新的图片...

  • Android给图片加文字和图片水印

    先看效果图,左侧是原图,中间是添加文字水印,右侧是添加图片水印。 实现方法: 1、载入原始图片2、载入水印图片3、...

  • 给图片添加文字水印

    功能需求 在图片的给定位置上添加文字水印 水印可以旋转和设置透明度 先说说自己的实现思路: 先创建具有透明背景色的...

网友评论

      本文标题:JAVA-图片加水印功能的实现

      本文链接:https://www.haomeiwen.com/subject/rektyhtx.html