java 图片添加水印(文字水印+图片水印)

一、图片水印(水印文件覆盖到源文件上) 

/**
     * @param buffImg 源文件(BufferedImage)
     * @param waterImg 水印文件(BufferedImage)
     * @param x       X偏移量
     * @param y       Y偏移量
     * @param alpha   透明度, 选择值从0.0~1.0: 完全透明~完全不透明
     * @return BufferedImage
     * @throws IOException
     * @Title: 构造图片
     * @Description: 生成水印并返回java.awt.image.BufferedImage
     */
    public static BufferedImage overlyingImage(BufferedImage buffImg, BufferedImage waterImg, int x, int y, float alpha) throws IOException {
        // 创建Graphics2D对象,用在底图对象上绘图
        Graphics2D g2d = buffImg.createGraphics();
        int waterImgWidth = waterImg.getWidth();// 获取层图的宽度
        int waterImgHeight = waterImg.getHeight();// 获取层图的高度
        // 在图形和图像中实现混合和透明效果
        g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
        // 绘制
        g2d.drawImage(waterImg, x, y, waterImgWidth, waterImgHeight, null);
        g2d.dispose();// 释放图形上下文使用的系统资源
        return buffImg;
    }

效果图:

 源文件(buffImg):java 图片添加水印(文字水印+图片水印)_第1张图片           
水印文件(waterImg):java 图片添加水印(文字水印+图片水印)_第2张图片                 
最后效果:java 图片添加水印(文字水印+图片水印)_第3张图片

根据需要设置透明度、旋转角度、铺满样式

 

二、文字水印(由于要设置旋转效果,所以为了让展示效果铺满整个图片,所以x和y的偏移量取负数,效果好看些)

/** 文字水印
     * @param buffImg 源文件(BufferedImage)
     * @param x       X偏移量
     * @param y       Y偏移量
     * @param alpha   透明度, 选择值从0.0~1.0: 完全透明~完全不透明
     * @return BufferedImage
     * @throws IOException
     * @Title: 构造图片
     * @Description: 生成水印并返回java.awt.image.BufferedImage
     */
    public static BufferedImage overlyingImageFont(BufferedImage buffImg, int x, int y, float alpha) throws IOException {
        // 创建Graphics2D对象,用在底图对象上绘图
        Graphics2D g = buffImg.createGraphics();
        // 3、设置对线段的锯齿状边缘处理
        g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
                RenderingHints.VALUE_INTERPOLATION_BILINEAR);
        //设置旋转(旋转角度,旋转x轴定点,y轴定点)
        g.rotate(Math.toRadians(45),
                0D,
                0D);
        Font font = new Font("宋体", Font.BOLD, 20);
        //设置字体
        g.setFont(font);
        //设置颜色
        g.setColor(Color.GRAY);
        // 设置透明效果
        g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
        // 8、第一参数->设置的内容,后面两个参数->文字在图片上的坐标位置(x,y)
        /**开始平铺界面*/
        for (int i = 0; i < 20; i++) {
            for (int j = 0; j < 20; j++) {
                y+=150;
                g.drawString("我是文字内容", x, y);
            }
            x+=150;
            y=0;
        }
        g.dispose();// 释放图形上下文使用的系统资源

        return buffImg;
    }

效果图:

 源文件(buffImg):java 图片添加水印(文字水印+图片水印)_第4张图片                        
最后效果:

你可能感兴趣的:(java,java)