给图片添加水印

这篇具有很好参考价值的文章主要介绍了给图片添加水印。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

@Slf4j
public class ImageUtils {
    @Test
    public void test1() throws IOException {
        //得到全部的图片文件
        Path path = Paths.get("D:\\Files\\CDN\\file\\_resources");
        if (!Files.exists(path)) {
            throw new RuntimeException("目录或文件不存在!");
        }
        List<Path> collect = new ArrayList<>();
        if (Files.isDirectory(path)) {
            collect = Files.walk(path).filter(temp -> temp.getFileName().toString().endsWith(".png")).collect(Collectors.toList());
        } else {
            boolean b = path.getFileName().toString().endsWith(".png");
            if (b) {
                collect.add(path);
            }
        }
        if (CollectionUtils.isEmpty(collect)) {
            return;
        }
        for (Path temp : collect) {
            changeImg(temp.toFile());
        }
    }

    /**
     * 加水印
     *
     * @param srcImgFile 本地图片地址
     * @throws IOException
     */
    private void changeImg(File srcImgFile) throws IOException {
        //将文件对象转化为图片对象
        Image srcImg = ImageIO.read(srcImgFile);
        //获取图片的宽
        int srcImgWidth = srcImg.getWidth(null);
        //获取图片的高
        int srcImgHeight = srcImg.getHeight(null);
//        System.out.println("图片的宽:" + srcImgWidth);
//        System.out.println("图片的高:" + srcImgHeight);

        BufferedImage bufImg = new BufferedImage(srcImgWidth, srcImgHeight, BufferedImage.TYPE_INT_RGB);
        // 加水印
        //创建画笔
        Graphics2D g = bufImg.createGraphics();
        //绘制原始图片
        g.drawImage(srcImg, 0, 0, srcImgWidth, srcImgHeight, null);
        //-------------------------文字水印 start----------------------------
        //根据图片的背景设置水印颜色
        g.setColor(new Color(158,160,161));
        //设置字体  画笔字体样式为微软雅黑,加粗,文字大小为12pt
        g.setFont(new Font("微软雅黑", Font.BOLD, 12));
        //水印内容
        String waterMarkContent = "https://www.cnblogs.com/lemonpuer";
        //设置水印的坐标
        int x = (srcImgWidth - getWatermarkLength(waterMarkContent, g)) - 5;
        int y = srcImgHeight - 5;
        //画出水印 第一个参数是水印内容,第二个参数是x轴坐标,第三个参数是y轴坐标
        g.drawString(waterMarkContent, x, y);
        g.dispose();
        //-------------------------文字水印 end----------------------------
        //待存储的地址
//        String tarImgPath = "F:\\0a8de9fc675db86eab79aa36b7575374.png";
        // 输出图片
        FileOutputStream outImgStream = new FileOutputStream(srcImgFile);
        ImageIO.write(bufImg, "png", outImgStream);
        log.info("图片{}成功添加水印",srcImgFile.getName());
        outImgStream.flush();
        outImgStream.close();
    }

    /**
     * 获取水印文字的长度
     *
     * @param waterMarkContent
     * @param g
     * @return
     */
    private int getWatermarkLength(String waterMarkContent, Graphics2D g) {
        return g.getFontMetrics(g.getFont()).charsWidth(waterMarkContent.toCharArray(), 0, waterMarkContent.length());
    }
}

文章来源地址https://www.toymoban.com/news/detail-711975.html

到了这里,关于给图片添加水印的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【SpringBoot中使用SLE4J日志框架启动报错:SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinde】

    1.1 出现的问题 SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder”. SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. 1.2 原因分析 检查自己的maven依赖,发现已经引入了slf4j-api了,这是为什么呢?其原因是,SLF4J本身

    2024年02月13日
    浏览(37)
  • Class path contains multiple SLF4J bindings.问题原因及解决方案

    问题背景 在进行logback的日志输出测试时,显示如下错误 2、原因 根据上面的错误提示,存在多个SLF4J bindings绑定,即存在多个slf4j的实现类,按上图所示这两个实现分别是 logback-classic-1.2.6和slf4j-log4j12-1.6.1 ,我们需要的是logback而不是log4j, 3、解决方案 因此,我们去掉log4j的

    2024年02月11日
    浏览(45)
  • 多种方法解决Failed to load class “org.slf4j.impl.StaticLoggerBinder“.的错误

    今天在编写使用 Quartz 执行定时任务的方法,如下代码所示: 启动时却报出如下图的错误: 即 SLF4J: Failed to load class \\\"org.slf4j.impl.StaticLoggerBinder\\\". 首先,找到上图中的 SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. 这句话。 将其翻译成中文是 SLF4J:有关更多详

    2024年02月04日
    浏览(68)
  • slf4j java: 程序包org.slf4j不存在问题解决

    Error:(17, 1) java: 程序包org.slf4j不存在 1、本来就集成了日志依赖,后面添加了一个新的maven依赖,导致lombok.extern.slf4j.@Slf4j注解有问题。 解决办法:手动引入slf4j依赖和log4j依赖 旭东怪的个人空间-旭东怪个人主页-哔哩哔哩视频 哔哩哔哩旭东怪的个人空间,提供旭东怪分享的视

    2024年02月12日
    浏览(52)
  • SpringBoot——Slf4j

    在开发中,我们经常使用 System.out.println() 来打印一些信息,但是这样不好,因为大量的使用 System.out 会增加资源的消耗。我们实际项目中使用的是 slf4j 的 logback 来输出日志,效率挺高的,Spring Boot 提供了一套日志系统,logback 是最优的选择。 引用百度百科里的一段话: SLF

    2023年04月18日
    浏览(50)
  • 给图片添加图片水印

            react + antd 4.x(此版本没有watermark水印),需要将后端传递的图片添加图片水印 1、水印添加问题 2、水印添加完成后显示问题         将watermark水印图片和img需要添加水印的图片同时创建了,以至于在img创建成功后watermark有可能还没有创建成功,导致没有进入

    2024年02月21日
    浏览(59)
  • uniapp制作水印相机给图片添加水印并且保存图片至本地

    文件主要分为两大类: 1.代码包文件:代码包文件指的是在项目目录中添加的文件。 2.本地文件:通过调用接口本地产生,或通过网络下载下来,存储到本地的文件。 其中本地文件又分为三种: 1.本地临时文件:临时产生,随时会被回收的文件。运行时最多存储 4GB,结束运

    2024年02月11日
    浏览(55)
  • SLF4J门面日志框架源码探索

    SLF4J即Simple Logging Facade for Java,它提供了Java中所有日志框架的简单外观或抽象。因此,它使用户能够使用单个依赖项处理任何日志框架,例如:Log4j,Logback和JUL(java.util.logging)。通过在类路径中插入适当的 jar 文件(绑定),可以在部署时插入所需的日志框架。如果要更换日志

    2024年02月09日
    浏览(64)
  • SpringBoot集成slf4j日志系统

    作者平台: | CSDN:blog.csdn.net/qq_4115394… | 掘金:juejin.cn/user/651387… | 知乎:www.zhihu.com/people/1024… | GitHub:github.com/JiangXia-10… | 微信公众号:1024笔记 本文大约4777字,预计阅读时长11分钟 日志系统作为一个应用系统的重要部分之一,它能够有助于我们在系统在线上环境中如果

    2023年04月19日
    浏览(41)
  • Python操作Word水印:添加文字或图片水印

    在Word文档中,可以添加半透明的图形或文字作为水印,以保护文档的原创性,防止未经授权的复制或使用。除了提供安全功能外,水印还可以展示文档创作者的信息、附加的文档信息,或者仅用于文档的装饰。本文将介绍如何使用 Spire.Doc for Python 在程序中的轻松 添加文字和

    2024年02月08日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包