图片添加图片水印和文字水印

前言:最近需要对图片添加文字水印和图片水印,而且要根据原图片不同的大小,打上不同的大小的水印和文字,保证用户在视觉上看到的水印的大小是一致的。

话不多说,上代码,先上处理图片的代码

/**
     * @author: Aubergine
     * @date: 2018/10/28 11:57
     * @param srcImage 原图片的地址
     * @param pressImg 水印图片
     * @param pressText 水印文字
     * @param color 字体的颜色
     * @param font 字体的大小
     * @param alpha 模糊度
     * @return
     */
    public BufferedImage pressText(File srcImage, Image pressImg, String pressText, Color color,Font font, float alpha) {
        final BufferedImage destImage = ImageUtil.read(srcImage);
        final Graphics2D gf = destImage.createGraphics();
        // 抗锯齿
        gf.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        gf.setColor(color);
        gf.setFont(font);
        // 透明度
        gf.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
        // 在指定坐标绘制水印文字
        FontMetrics metrics = gf.getFontMetrics(font);
        int textLength = metrics.stringWidth(pressText);
        int textHeight = metrics.getAscent() - metrics.getLeading() - metrics.getDescent();
        gf.drawString(pressText, destImage.getWidth() - textLength, destImage.getHeight() - (textHeight / 2));
        gf.dispose();
        int width = destImage.getWidth((ImageObserver) null);
        int height = destImage.getHeight((ImageObserver) null);
        BufferedImage destImage2 = new BufferedImage(width, height, 1);
        Graphics2D g = destImage2.createGraphics();
        g.drawImage(destImage, 0, 0, width, height, (ImageObserver) null);
        int pressImgWidth = pressImg.getWidth((ImageObserver) null);
        int pressImgHeight = pressImg.getHeight((ImageObserver) null);
        int x = (width - pressImgWidth) - textLength - 5;
        int y = (height - pressImgHeight);
        g.setComposite(AlphaComposite.getInstance(10, alpha));
        // 给图片打上图片水印
        g.drawImage(pressImg, x, y, pressImgWidth, pressImgHeight, (ImageObserver) null);
        g.dispose();
        return destImage2;
    }

调用的时候这样用

// 原图尺寸 3800*2850
ImageUtil.write(pressText(cn.hutool.core.io.FileUtil.file("C:\\Users\\Administrator\\Desktop\\1-3800-2850.jpg"),
                ImageUtil.read(new File("C:\\Users\\Administrator\\Desktop\\newlog\\116_116.png")),
                "@版权版权", Color.WHITE,
                new Font("微软雅黑", Font.BOLD, 86),
                1f), cn.hutool.core.io.FileUtil.file("C:\\Users\\Administrator\\Desktop\\1-3800-2850-r.jpg"));
// 原图尺寸是 1500*760
ImageUtil.write(pressText(FileUtil.file("C:\\Users\\Administrator\\Desktop\\1-1500-760.jpg"),
                ImageUtil.read(new File("C:\\Users\\Administrator\\Desktop\\newlog\\58_58.png")),
                "@版权版权", Color.WHITE,
                new Font("微软雅黑", Font.BOLD, 42),
                1f), cn.hutool.core.io.FileUtil.file("C:\\Users\\Administrator\\Desktop\\1-1500-760-r.jpg"));

原图

效果图

原图

效果图

PS:推荐一个比较好的JAVA工具包hutool,里面有很多的小工具,在开发的过程中使用很方便。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我了解了您的问题。您可以使用Java的Graphics2D类来添加文字水印图片水印。以下是一个简单的例子: ```java import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; public class Watermark { public static void main(String[] args) { try { // 读取原始图片 BufferedImage originalImage = ImageIO.read(new File("original.png")); // 创建带有透明度的图片 BufferedImage watermarkedImage = new BufferedImage(originalImage.getWidth(), originalImage.getHeight(), BufferedImage.TYPE_INT_ARGB); // 获取 Graphics2D 对象 Graphics2D g2d = (Graphics2D) watermarkedImage.getGraphics(); // 在图片上绘制原始图片 g2d.drawImage(originalImage, 0, 0, null); // 设置文字水印 String text = "Watermark Text"; Font font = new Font("Arial", Font.BOLD, 48); g2d.setFont(font); g2d.setColor(Color.WHITE); g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f)); FontMetrics fontMetrics = g2d.getFontMetrics(); Rectangle2D rect = fontMetrics.getStringBounds(text, g2d); g2d.drawString(text, (originalImage.getWidth() - (int) rect.getWidth()) / 2, originalImage.getHeight() / 2); // 设置图片水印 BufferedImage watermarkImage = ImageIO.read(new File("watermark.png")); int x = originalImage.getWidth() - watermarkImage.getWidth() - 10; int y = originalImage.getHeight() - watermarkImage.getHeight() - 10; g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f)); g2d.drawImage(watermarkImage, x, y, null); // 保存水印图片 ImageIO.write(watermarkedImage, "png", new File("watermarked.png")); // 释放资源 g2d.dispose(); System.out.println("Watermark applied."); } catch (Exception ex) { System.out.println(ex.getMessage()); } } } ``` 您可以根据您的需求调整文字图片的位置、大小、透明度等参数以实现您想要的效果。希望能对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值