SpingBoot/JAVA实现给图片加水印功能(通过thumbnailator库)
前言
最近某项目有个加水印的需求,JAVA实现给已上传的图片增加水印并输出的功能,图片A+水印B=合成带水印缓存图片C
(就是不需要保存到硬盘,不占用空间),目前网上的解决方案挺多但是挺乱,于是趁机整理了一份简洁版供大家使用。这里借助了一个很强大的Thumbnails库
。
图片A
水印B
效果图C
MAVEN
<!-- https://mvnrepository.com/artifact/net.coobird/thumbnailator -->
<!-- https://github.com/coobird/thumbnailator -->
<dependency><groupId>net.coobird</groupId><artifactId>thumbnailator</artifactId><version>0.4.13</version>
</dependency>
核心代码
storageService.getPathString()
仅用于获取存放图片的目录。storageService.getPathString()+filename
代表图片AstorageService.getPathString()+"watermark.png"
代表水印B `BufferedImage- ` 为缓存的图片类,也就是我不需要save到file中去,这里就借助这个对象,如果你需要保存,可以使用toFile();
/*** JAVA给图片加水印* @author zhengkai.blog.csdn.net* @param filename* @param response* @throws IOException*/@GetMapping("/files2/{filename:.+}")@ResponseBody@Asyncpublic void serveFile2(@PathVariable String filename, HttpServletResponse response) throws IOException {//加载要显示的文件File inFile = new File(storageService.getPathString()+filename);//加载水印文件File watFile = new File(storageService.getPathString()+"watermark.png");//加载到BufferedImage中BufferedImage originalImage = ImageIO.read(inFile);BufferedImage waterImage = ImageIO.read(watFile);//调用Thumbnails库可参考(https://github.com/coobird/thumbnailator/wiki/Examples)//by zhengkai.blog.csdn.netBufferedImage thumbnail = Thumbnails.of(originalImage)//必须设置大小,否则有size not set的ERROR.size(600, 400)//var3表示透明度.watermark(Positions.BOTTOM_RIGHT, waterImage,0.2f)//缓存输出.asBufferedImage();//从HttpServletResponse中获取输出流OutputStream outputStream = response.getOutputStream();//将BufferedImage转换为InputStreamInputStream inputStream = bufferedImageToInputStream(thumbnail);//直接COPY输出IOUtils.copy(inputStream, outputStream);//清理缓存IOUtils.closeQuietly(inputStream);IOUtils.closeQuietly(outputStream);//输出下载格式的图片/*return ResponseEntity.ok().header(HttpHeaders.CONTENT_DISPOSITION,"attachment; filename=\"" + URLEncoder.encode(filename, "UTF-8") + "\"").body(thumbnail);*/}/*** JAVA给图片加水印:将BufferedImage转换为InputStream* @author zhengkai.blog.csdn.net*/public InputStream bufferedImageToInputStream(BufferedImage image){ByteArrayOutputStream os = new ByteArrayOutputStream();try {ImageIO.write(image, "png", os);InputStream input = new ByteArrayInputStream(os.toByteArray());return input;} catch (IOException e) {e.printStackTrace();}return null;}
效果展示
Mission Compled! resolved by zhengkai.blog.csdn.net
SpingBoot/JAVA实现给图片加水印功能(通过thumbnailator库)相关推荐
- php加水印功能,PHP图片加水印功能
本篇文章主要介绍PHP图片加水印功能,感兴趣的朋友参考下,希望对大家有所帮助. 实例代码如下:<?php /** * 功能:给一张图片加上水印效果 * $i 要加水印效果的图片 * $t 水印文 ...
- 图片加水印 java_Java使用Thumbnailator给图片加水印
Thumbnailator简介 Thumbnailator是一个高质量的缩略图生成的Java库. 支持: 从现有的图像创建高质量的缩略图. 给图片加水印,可以设置水印的透明度(0%~100%). 支持 ...
- java如何为图片加水印
文章目录 一.读取图片 2.获取图片的像素 3.创建Graphics2D对象 4.设置加过水印照片的输出路径 5.测试 6.结果如下 一.读取图片 这里读取本地文件,也可以读取服务器上的文件. //读 ...
- 如何给图片加水印?这三个图片加水印方法,帮你添加花式水印
大家有没有这样情况,自己好不容易做好的作品发布到网络平台上结果被他人盗用了,很让人气愤,那我们应该如何避免这种情况呢? 其实我们可以给自己的作品加上一些专属的个性化水印,那小伙伴们知道图片加水印怎么操 ...
- 图片加水印怎么弄?这些图片加水印方法分享给你
相信很多小伙伴平常会喜欢将自己拍摄的作品上传到社交平台上与他人分享吧.然而有时会遇到自己辛苦拍摄的视频或者图片被他人盗用,甚至是获利的情况.其实想要避免自己的作品被他人盗用,我们可以在作品上面添加专属 ...
- 如何给图片加水印?分享怎么给图片加水印的方法
当我们在平台上发布自己精心拍摄的照片,或分享自己总结的知识点时,难免会遇到一些人盗用自己图片的情况.这时候,我们就会给图片添加上水印,从而来防止自己的图片被盗,那要怎么给图片加水印呢?别着急,今天我就 ...
- 图片加水印的简单方法
图片加水印的简单方法~许多小伙伴都习惯在需要对外发布的图片上添加水印,添加水印后就不必担心图片被盗用或被用于其它不良目的,给我们造成不好的影响.然而,许多用户不知道如何为图片添加水印,也不知道应该选择 ...
- 图片怎么加水印?图片加水印用什么软件?
不知道大家有没有遇到过这种情况,自己用心拍摄制作的图片,分享到社交平台后就被其他人盗用,找对方理论结果还不承认,让人很是恼火.因此,现在将图片或视频分享到网上时,我都会先给文件添加属于我自己的水印,减 ...
- 不知道图片添加水印软件有哪些?推荐这三款给图片加水印的软件
各位画手大大有没有遇到过这种情况,自己好不容易画好的稿子想发布到一些网络平台上引流,但是图片又很容易被盗用,这个时候我们需要借助一些软件给自己的画稿加上自己的水印防止被盗,那你知道图片添加水印软件有哪 ...
最新文章
- 关于ccflow的编译错误
- NodeJS + Aliyun 实现 DDNS
- 标准C++中的string类的用法总结(转)
- JVM概念之Java对象的大小与引用类型
- Entity Framework 普通操作(复习用)——感觉有点不对,需要撸代码验证
- 剑指offer--旋转数组的最小数字
- PS如何生成svg代码格式的path路径 - PS技巧篇
- PclZip:强大的PHP压缩与解压缩zip类
- android studio的一个bug
- CoreAnimation-CATransform3D特效
- spellChecker 拼写检查
- 为何我的孩子不沉迷网络游戏
- 定点 浮点 神经网络 量化_定点量化
- scrapy爬取猫眼电影信息
- 山东移动携手华云数据打造DICT战略合作伙伴生态圈 推动区域数字经济高质量发展
- 跟着团子学SAP PS:项目模版搭建 CJ91/CJ92/CJ93/CN01/CN02/CN03/CN11/CN12/CN13
- Storm部分:Storm Grouping -- 数据流分组(各种数据分发策略的练习)【Java版纯代码】
- 基于Linux的信息处理板卡,linux硬件信息查看
- 嵌入式裸机课程之C语言程序调用和重定位学习笔记
- OD学习手记——常用断点