接到一个新需求,上传图片后添加水印
先测试本地图片加水印


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添加水印相关推荐

  1. 在Java生成的html页面加水印,Java在Excel中添加水印的实现(单一水印、平铺水印)...

    在Excel中没有直接添加水印的功能,但依旧可以通过一定方式来实现类似水印效果.本文通过Java程序代码介绍具体实现方法.可添加单一水印效果,即水印是以单个文本字样来呈现:也可添加多个平铺水印效果,即 ...

  2. 使用java代码给视频添加水印

    使用java代码给视频添加水印 步骤一:下载相关依赖包: 相关地址:ffmpeg 步骤二:下载ffmpeg依赖软件 相关地址:点击下载 步骤三:直接上代码 类一:FFMPEG package cn.o ...

  3. 【Java工具类】(10)—java中给图片添加水印

    Java工具类(10)-java中给图片添加水印 1.工具类 package util;import javax.imageio.ImageIO; import java.awt.*; import ...

  4. java 图片压缩 图片添加水印 thumbnailator javafx

    应用截图 启动界面 添加图片 处理结果 项目地址 图片压缩: java 图片压缩 图片添加水印 thumbnailator javafx pom.xml <?xml version=" ...

  5. Java在PDF中添加水印(文本/图片水印)效果import com.spire.pdf.*; import com.spire.pdf.graphics.*; import java.awt.*;

    水印是一种十分常用的防伪手段,常用于各种文档.资料等.常见的水印,包括文字类型的水印.图片或logo类型的水印.以下Java示例,将分别使用insertTextWatermark(PdfPageBas ...

  6. java BufferedImage转MultipartFile

    java生成二维码返回BufferedImage对象,需要转成MultipartFile进行文件上传. 转换流程:BufferedImage → InputStream → MultipartFile ...

  7. java将多张图片添加水印并生成压缩包导出

    模板 package com.centit.imgsdown.controller;import com.alibaba.fastjson.JSONArray; import com.centit.f ...

  8. java给视频添加水印_用java实现对视频添加水印的代码或思路

    展开全部 package com.jc.ts.services; import java.awt.Color; import java.awt.Graphics; import java.awt.Im ...

  9. Java poi给word添加水印,字体,颜色,倾斜度等

    之前使用poi-tl进行word模板生成word文件,在生成word之后,现在需求需要给word添加一个水印的功能,先贴图生成后的效果,部分内容涉及公司信息打了马赛克, 贴一下代码 /*** @aut ...

最新文章

  1. mysql error manager,MYSQL Starting MySQL. ERROR! Manager of pid-file quit without updating file
  2. 没有找到borlandmm.dll 报错的解决方法
  3. Java:写2个线程,其中一个线程打印1-52,另一个线程打印A-Z,打印顺序应该是12A34B56C...5152Z。
  4. Android 编译 SDK
  5. win7蓝屏_win7电脑蓝屏怎么办
  6. 大数据分析的5个方面
  7. 【计算机图形学】实验:C#语言采用GDI+定义笔刷并填充图形完整实验操作流程
  8. Java成神之路——javaAgent(插桩,attach)
  9. rdd 内生分组_04、常用RDD操作整理
  10. Js对接口数据归类整理
  11. clustalw序列比对_序列比对,科研必备的几款软件
  12. cad2017插入电气符号_电气电气CAD图形符号大全.pdf
  13. PySide从实战开始学习系列(一)认识PySide
  14. openbci脑电帽3d打印文件下载
  15. html毕业答辩ppt,毕业论文答辩ppt(要求和制作技巧)
  16. 51Nod-1136 欧拉函数
  17. 英语论文写作笔记一则
  18. 系统架构设计师备考经验分享:边听课边画思维导图,高效学习
  19. 解决Failed to load module canberra-gtk-module错误
  20. vscode修改代码颜色

热门文章

  1. 深度学习(四十八)InfoGAN学习笔记
  2. Android基础总结
  3. Python生成器函数的定义,使用,方法,实例,(yield、yield from)
  4. 浙江大学计算机博士申请考核,考博经验|2020年浙江大学博士申请考核经验分享...
  5. 附近商家位置java开发附近定位
  6. 最经典的android塔防,安卓TOP10:经典塔防《王国保卫战:起源》上架
  7. Apache Calcite 实现方言转换
  8. vue2的vue.config文件
  9. 【Demllie航天】火箭方程
  10. CF 192 DIV2