1秒实现Springboot 图片添加水印功能

目录
  • 前言
  • 正文

前言

真的一秒就可以实现么?

是的,因为我们直接复制粘贴工具类拿来用就可以。

正文

工具类 WaterMarkUtil.java

package com.example.dotest.util;

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.InputStream;
import java.io.OutputStream;

import javax.imageio.ImageIO;

/**
 *   图片水印工具类
 *
 */
public class WaterMarkUtil {

    // 水印透明度
    private static final float alpha = 0.8f;
    // 水印横向位置
    private static int positionWidth = 100;
    // 水印纵向位置
    private static int positionHeight = 300;
    // 水印文字字体
    private static final Font font = new Font("宋体", Font.BOLD, 30);
    // 水印文字颜色
    private static final Color color = Color.white;

    /**
     * 给图片添加水印文字
     *
     * @param text   水印文字
     * @param srcImgPath 源图片路径
     * @param targetPath 目标图片路径
     */
    public static void markImage(String text, String srcImgPath, String targetPath) {
        markImage(text, srcImgPath, targetPath, null);
    }

    /**
     * 给图片添加水印文字、可设置水印文字的旋转角度
     *
     * @param text
     * @param srcImgPath
     * @param targetPath
     * @param degree
     */
    public static void markImage(String text, String srcImgPath, String targetPath, Integer degree) {

        OutputStream os = null;
        try {
            // 0、图片类型
            String type = srcImgPath.substring(srcImgPath.indexOf(".") + 1, srcImgPath.length());

            // 1、源图片
            Image srcImg = ImageIO.read(new File(srcImgPath));

            int imgWidth = srcImg.getWidth(null);
            int imgHeight = srcImg.getHeight(null);

            BufferedImage buffImg = new BufferedImage(imgWidth, imgHeight, BufferedImage.TYPE_INT_RGB);

            // 2、得到画笔对象
            Graphics2D g = buffImg.createGraphics();
            // 3、设置对线段的锯齿状边缘处理
            g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
            g.drawImage(srcImg.getScaledInstance(imgWidth, imgHeight, Image.SCALE_SMOOTH), 0, 0, null);
            // 4、设置水印旋转
            if (null != degree) {
                g.rotate(Math.toRadians(degree), (double) buffImg.getWidth() / 2, (double) buffImg.getHeight() / 2);
            }
            // 5、设置水印文字颜色
            g.setColor(color);
            // 6、设置水印文字Font
            g.setFont(font);
            // 7、设置水印文字透明度
            g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
            // 8、第一参数->设置的内容,后面两个参数->文字在图片上的坐标位置(x,y)
            positionWidth = 50;
            positionHeight = imgHeight-30;
            g.drawString(text,positionWidth, positionHeight);
            // 9、释放资源
            g.dispose();
            // 10、生成图片
            os = new FileOutputStream(targetPath);
            // ImageIO.write(buffImg, "JPG", os);
            ImageIO.write(buffImg, type.toUpperCase(), os);

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (null != os){
                    os.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    /**
     *  给图片添加水印文字、可设置水印文字的旋转角度
     * @param text
     * @param inputStream
     * @param outputStream
     * @param degree
     * @param typeName
     */
    public static void markImageByIO(String text, InputStream inputStream, OutputStream outputStream,
                                     Integer degree, String typeName) {
        try {
            // 1、源图片
            Image srcImg = ImageIO.read(inputStream);

            int imgWidth = srcImg.getWidth(null);
            int imgHeight = srcImg.getHeight(null);
            BufferedImage buffImg = new BufferedImage(imgWidth, imgHeight, BufferedImage.TYPE_INT_RGB);

            // 2、得到画笔对象
            Graphics2D g = buffImg.createGraphics();
            // 3、设置对线段的锯齿状边缘处理
            g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
            g.drawImage(srcImg.getScaledInstance(imgWidth, imgHeight, Image.SCALE_SMOOTH), 0, 0, null);
            // 4、设置水印旋转
            if (null != degree) {
                g.rotate(Math.toRadians(degree), (double) buffImg.getWidth() / 2, (double) buffImg.getHeight() / 2);
            }
            // 5、设置水印文字颜色
            g.setColor(color);
            // 6、设置水印文字Font
            g.setFont(font);
            // 7、设置水印文字透明度
            g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
            // 8、第一参数->设置的内容,后面两个参数->文字在图片上的坐标位置(x,y)

            g.drawString(text, positionWidth, positionHeight);
            // 9、释放资源
            g.dispose();
            // 10、生成图片
            ImageIO.write(buffImg, typeName.toUpperCase(), outputStream);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        String srcImgPath = "D:\\testSmile.jpg";
        String text = "JCccc";
        // 给图片添加水印文字
        markImage(text, srcImgPath, "D:\\testSmileWithMark.jpg");
        // 给图片添加水印文字,水印文字旋转-45
        markImage(text, srcImgPath, "D:\\testSmileWithMarkRotate.jpg", -45);
        System.out.println("给图片添加水印文字完毕");
    }

}

然后准备一张图:

未加水印前:

然后调用里面的函数即可:

    public static void main(String[] args) {
        String srcImgPath = "D:\\testSmile.jpg";
        String text = "JCccc";
        // 给图片添加水印文字
        markImage(text, srcImgPath, "D:\\testSmileWithMark.jpg");
        // 给图片添加水印文字,水印文字旋转-45
        markImage(text, srcImgPath, "D:\\testSmileWithMarkRotate.jpg", -45);
        System.out.println("给图片添加水印文字完毕");
    }

简析:

调用一下可以看到水印图片出来了:

看下效果:

其余:

到此这篇关于1秒实现Springboot 图片添加水印功能的文章就介绍到这了,更多相关springboot图片添加水印内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • springboot实现通过路径从磁盘直接读取图片

    目录 通过路径从磁盘直接读取图片 访问本地(磁盘)图片 通过路径从磁盘直接读取图片 这段时间在做Springboot和Vue的例子,读取图片给出路径直接可以读,太方便了,一直么有搞懂为什么. 后面看到原来是在配置文件MyWebConfigurer中addResourceHandlers方法中增加了 registry.addResourceHandler("/api/file/**").addResourceLocations("file:" + "d:/w

  • SpringBoot接口中如何直接返回图片数据

    目录 接口直接返回图片数据 起因 类似这种 根据个人经验 优雅的实现图片返回 接口直接返回图片数据 起因 最近在做涉及到分享推广的业务,需要由业务员分享二维码进入推广页面,由于是新项目,前期预算和用量都有限,没有搭建对象存储服务,所以决定使用后台服务动态生成二维码图片直接图片数据并返回. 首先是二维码的生成,决定使用google的zxing,毕竟google的东西还是不错的,maven添加依赖如下: <!-- https://mvnrepository.com/artifact/com.goog

  • 1秒钟实现Springboot 替换/写入 word文档里面的文字、图片功能

    目录 前言 正文 前言 图片加水印:Springboot 图片需要添加水印,怎么办? 1秒就实现 那么word文档替换文字.插入图片,当然也是1秒钟了(jar包引入,工具类代码复制粘贴,调试,完事). 事不宜迟,开始敲代码. 正文 本篇内容: 1.word文档 替换内容里面的文字 (模板占位符方式传参替换) 2.word文档 插入图片 (指定位置传参插入) ① pom.xml 引入依赖: <dependency> <groupId>org.apache.poi</groupI

  • SpringBoot上传图片到指定位置并返回URL的实现

    目录 需求 前端部分(ElementUI+Vue.js) 后端部分(SpringBoot) 1.先配置application.yml文件 2.映射资源-重写WebMvcConfigurer接口,实现对资源的映射 3.Controller代码 想做一个上传图片的功能,来展示用户上传的图片. 在返回给前端的URL上弄了好久,前端一直无法访问到URL,结果一直显示404. 倒腾了一上午发现是 文件路径映射的问题,后端部分有讲解决办法,可供大家参考 需求 前端的图片上传到服务器指定的文件目录,并且将UR

  • 1秒实现Springboot 图片添加水印功能

    目录 前言 正文 前言 真的一秒就可以实现么? 是的,因为我们直接复制粘贴工具类拿来用就可以. 正文 工具类 WaterMarkUtil.java package com.example.dotest.util; import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.Image; import java.awt

  • asp.net继承IHttpHandler接口实现给网站图片添加水印功能实例

    本文实例讲述了asp.net继承IHttpHandler接口实现给网站图片添加水印功能.分享给大家供大家参考,具体如下: 先展示图片效果: 1. 在App_Code下添加类文件,命名为ImageSY 文件内容如下 public class ImageSY : IHttpHandler { public ImageSY() { // //TODO: 在此处添加构造函数逻辑 // } #region IHttpHandler 成员 public bool IsReusable { get { ret

  • PHP图片添加水印功能示例小结

    本文实例总结了PHP图片添加水印功能.分享给大家供大家参考,具体如下: 例1.很简单图下添加水印函数 <?php /** * 追加水印 * * @param string $source_img 原始图片url * @param string $water_map 水印图片url */ function addWaterMap($source_img, $water_map) { $img = imagecreatefromjpeg($source_img); //读取原图 $img_x = i

  • springboot图片验证码功能模块

    目录 前言: 第一步:工具类 第二步:图片生成: 整合到springboot项目中: 前言: 大家好!我是小小!今天我们用五分钟来用springboot实现我们常用的图形验证码功能模块! 用户登录几乎是一个线上系统必不可少且使用相对比较频繁的一个模块,为了防止恶意暴力尝试,防止洪水攻击.防止脚本自动提交等,验证码是一个较为便捷且行之有效的预防手段. 具体效果如下: 第一步:工具类 该工具类为生成验证码图片的核心,直接拷贝到项目即可,无需做修改:可个性化的参数全部对外提供的API,比如 字体大小,

  • php实现图片添加水印功能

    复制代码 代码如下: <?php/** * 图片加水印(适用于png/jpg/gif格式) *  * @author flynetcn * * @param $srcImg 原图片 * @param $waterImg 水印图片 * @param $savepath 保存路径 * @param $savename 保存名字 * @param $positon 水印位置  * 1:顶部居左, 2:顶部居右, 3:居中, 4:底部局左, 5:底部居右  * @param $alpha 透明度 --

  • Springboot +redis+谷歌开源Kaptcha实现图片验证码功能

    背景 注册-登录-修改密码⼀般需要发送验证码,但是容易被 攻击恶意调⽤ 什么是短信-邮箱轰炸机 手机短信轰炸机是批.循环给⼿机⽆限发送各种⽹ 站的注册验 证码短信的方法. 公司带来的损失 短信⼀条5分钱,如果被⼤盗刷大家自己计算 邮箱通知不⽤钱,但被⼤盗刷,带宽.连接等都被占⽤,导致无法正常使⽤ 如何避免自己的网站成为”肉鸡“或者被刷呢 增加图形验证码(开发人员) 单IP请求次数限制(开发人员) 限制号码发送(⼀般短信提供商会做) 攻防永远是有的,只过加大了攻击者的成本,ROI划不过来⾃然就放弃

  • SpringBoot整合kaptcha实现图片验证码功能

    目录 栗子 配置文件 SpringBoot项目中pom.xml文件 项目代码 项目结构 SpringBootVerifyCodeApplication.java VerifyCodeConfig.java KaptchaController.java 测试 生成运算符验证码 1.设置字符个数为7 2.获取图片 3.演示一下 栗子 登录是所有系统都绕不开的一道坎,很多系统会在用户名和密码下发放置一个图形验证码,例如:  这些图形验证码看起来不仅很丑,而且模糊,但却是保护系统的第一道屏障,它的作用是

  • Android ViewPager实现每隔两秒自动切换图片功能

    布局代码: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <Fr

  • Spring Security 图片验证码功能的实例代码

    验证码逻辑 以前在项目中也做过验证码,生成验证码的代码网上有很多,也有一些第三方的jar包也可以生成漂亮的验证码.验证码逻辑很简单,就是在登录页放一个image标签,src指向一个controller,这个Controller返回把生成的图片以输出流返回给页面,生成图片的同时把图片上的文本放在session,登录的时候带过来输入的验证码,从session中取出,两者对比.这位老师讲的用Spring Security集成验证码,大体思路和我说的一样,但更加规范和通用些. spring securi

  • Android 5秒学会使用手势解锁功能

    Android手势解锁 本文讲述的是一个手势解锁的库,可以定制显示隐藏宫格点.路径.并且带有小九宫格显示图,和震动!让你学会使用这个简单,高效的库! 先来一波效果效果展示: 手势解锁效果 今天给大家介绍的是本人良心制作的一个手势解锁开源库,大家有什么建议和想法都可以发到我的邮箱: diosamolee2014@gmail.com 或者评论,我会为大家提供我力所能及的帮助! GitHub地址: https://github.com/Diosamo/Gesture_Lock 添加依赖: 添加的gra

随机推荐