java实现给MultipartFile添加水印
接到一个新需求,上传图片后添加水印
先测试本地图片加水印
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;/*** 給图片添加文字水印***/
public class WaterMarkUtils {/*** @param args*/public static void main(String[] args) {// 原图位置, 输出图片位置, 水印文字颜色, 水印文字try {// 读取原图片信息File srcImgFile = new File("C:/Users/Administrator/Desktop/测试用图/2.jpg");Image srcImg = ImageIO.read(srcImgFile);int srcImgWidth = srcImg.getWidth(null);int srcImgHeight = srcImg.getHeight(null);// 加水印BufferedImage bufImg = new BufferedImage(srcImgWidth,srcImgHeight,BufferedImage.TYPE_INT_RGB);//获取 Graphics2D 对象Graphics2D g = bufImg.createGraphics();//设置绘图区域g.drawImage(srcImg, 0, 0, srcImgWidth, srcImgHeight, null);//设置字体Font font = new Font("宋体", Font.PLAIN, 20);// 根据图片的背景设置水印颜色g.setColor(Color.green);g.setFont(font);//获取文字长度SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String format = sdf.format(new Date().getTime());int len = g.getFontMetrics(g.getFont()).charsWidth(format.toCharArray(),0,format.length());int x = srcImgWidth - len - 10;int y = srcImgHeight - 20;g.drawString(format, x, y);g.dispose();// 输出图片FileOutputStream outImgStream = new FileOutputStream("C:/Users/Administrator/Desktop/1/2.jpg");ImageIO.write(bufImg, "png", outImgStream);outImgStream.flush();outImgStream.close();System.out.println("添加水印完成");} catch (Exception e) {e.printStackTrace();}}
}
经测试,能正常使用
实际项目中使用的是MultipartFile上传图片
我最开始想到的是一个笨方法,先上传到本地,处理好水印之后再上上传到ftp,后来发现可以只用上传一次处理
public MultipartFile addWorkMarkToMutipartFile(MultipartFile multipartFile) throws IOException {// 获取图片文件名 xxx.png xxxString originFileName = multipartFile.getOriginalFilename();// 获取原图片后缀 pngint lastSplit = originFileName.lastIndexOf(".");String suffix = originFileName.substring(lastSplit + 1);// 获取图片原始信息String dOriginFileName = multipartFile.getOriginalFilename();String dContentType = multipartFile.getContentType();// 是图片且不是gif才加水印if (!suffix.equalsIgnoreCase("gif") && dContentType.contains("image")) {// 获取水印图片InputStream inputImg = multipartFile.getInputStream();Image img = ImageIO.read(inputImg);// 加图片水印int imgWidth = img.getWidth(null);int imgHeight = img.getHeight(null);BufferedImage bufImg = new BufferedImage(imgWidth, imgHeight,BufferedImage.TYPE_INT_RGB);//调用画文字水印的方法markWord(bufImg, img);ByteArrayOutputStream bs = new ByteArrayOutputStream();ImageOutputStream imOut = ImageIO.createImageOutputStream(bs);ImageIO.write(bufImg, suffix, imOut);InputStream is = new ByteArrayInputStream(bs.toByteArray());// 加水印后的文件上传multipartFile = new MockMultipartFile(dOriginFileName, dOriginFileName, dContentType, is);}return multipartFile;}
后面是上传图片逻辑,这里省略
测试
ftp服务器上的图片
java实现给MultipartFile添加水印相关推荐
- 在Java生成的html页面加水印,Java在Excel中添加水印的实现(单一水印、平铺水印)...
在Excel中没有直接添加水印的功能,但依旧可以通过一定方式来实现类似水印效果.本文通过Java程序代码介绍具体实现方法.可添加单一水印效果,即水印是以单个文本字样来呈现:也可添加多个平铺水印效果,即 ...
- 使用java代码给视频添加水印
使用java代码给视频添加水印 步骤一:下载相关依赖包: 相关地址:ffmpeg 步骤二:下载ffmpeg依赖软件 相关地址:点击下载 步骤三:直接上代码 类一:FFMPEG package cn.o ...
- 【Java工具类】(10)—java中给图片添加水印
Java工具类(10)-java中给图片添加水印 1.工具类 package util;import javax.imageio.ImageIO; import java.awt.*; import ...
- java 图片压缩 图片添加水印 thumbnailator javafx
应用截图 启动界面 添加图片 处理结果 项目地址 图片压缩: java 图片压缩 图片添加水印 thumbnailator javafx pom.xml <?xml version=" ...
- Java在PDF中添加水印(文本/图片水印)效果import com.spire.pdf.*; import com.spire.pdf.graphics.*; import java.awt.*;
水印是一种十分常用的防伪手段,常用于各种文档.资料等.常见的水印,包括文字类型的水印.图片或logo类型的水印.以下Java示例,将分别使用insertTextWatermark(PdfPageBas ...
- java BufferedImage转MultipartFile
java生成二维码返回BufferedImage对象,需要转成MultipartFile进行文件上传. 转换流程:BufferedImage → InputStream → MultipartFile ...
- java将多张图片添加水印并生成压缩包导出
模板 package com.centit.imgsdown.controller;import com.alibaba.fastjson.JSONArray; import com.centit.f ...
- java给视频添加水印_用java实现对视频添加水印的代码或思路
展开全部 package com.jc.ts.services; import java.awt.Color; import java.awt.Graphics; import java.awt.Im ...
- Java poi给word添加水印,字体,颜色,倾斜度等
之前使用poi-tl进行word模板生成word文件,在生成word之后,现在需求需要给word添加一个水印的功能,先贴图生成后的效果,部分内容涉及公司信息打了马赛克, 贴一下代码 /*** @aut ...
最新文章
- mysql error manager,MYSQL Starting MySQL. ERROR! Manager of pid-file quit without updating file
- 没有找到borlandmm.dll 报错的解决方法
- Java:写2个线程,其中一个线程打印1-52,另一个线程打印A-Z,打印顺序应该是12A34B56C...5152Z。
- Android 编译 SDK
- win7蓝屏_win7电脑蓝屏怎么办
- 大数据分析的5个方面
- 【计算机图形学】实验:C#语言采用GDI+定义笔刷并填充图形完整实验操作流程
- Java成神之路——javaAgent(插桩,attach)
- rdd 内生分组_04、常用RDD操作整理
- Js对接口数据归类整理
- clustalw序列比对_序列比对,科研必备的几款软件
- cad2017插入电气符号_电气电气CAD图形符号大全.pdf
- PySide从实战开始学习系列(一)认识PySide
- openbci脑电帽3d打印文件下载
- html毕业答辩ppt,毕业论文答辩ppt(要求和制作技巧)
- 51Nod-1136 欧拉函数
- 英语论文写作笔记一则
- 系统架构设计师备考经验分享:边听课边画思维导图,高效学习
- 解决Failed to load module canberra-gtk-module错误
- vscode修改代码颜色