主程序

    public void IoReadImage(HttpServletRequest request, HttpServletResponse response) throws IOException {BufferedImage bufImg = ImgDealUtil.waterPress(inStream, project.getWatermark());ImageIO.write(bufImg,"jpg",response.getOutputStream());response.setContentType("image/jpg"); // 设置返回的文件类型response.setHeader("Access-Control-Allow-Origin", "*");// 设置该图片允许跨域访问IOUtils.copy(inStream, response.getOutputStream());
}

图片水印公共类:

public class ImgDealUtil {/*** 图片添加水印* @param waterMarkContent* @throws IOException*/public static BufferedImage  waterPress(InputStream  in, String waterMarkContent) throws IOException {// 原图位置, 输出图片位置, 水印字体,水印文字样式,水印文字颜色, 水印文字大小,水印文字内容int fontSize = 30;String  fontType = "宋体";int fontStyle = Font.BOLD;Integer degree = 45;Color markContentColor = Color.black;if(BeanUtil.isEmpty(waterMarkContent)){waterMarkContent = "XXX";}Image srcImg = ImageIO.read(in);// 宽、高int srcImgWidth = srcImg.getWidth(null);int srcImgHeight = srcImg.getHeight(null);// 加水印BufferedImage bufImg = new BufferedImage(srcImgWidth, srcImgHeight, BufferedImage.TYPE_INT_RGB);Graphics2D g = bufImg.createGraphics();g.drawImage(srcImg, 0, 0, srcImgWidth, srcImgHeight, null);Font font = new Font(fontType, fontStyle, fontSize);//设置水印颜色g.setColor(markContentColor);g.setFont(font);// 抗锯齿g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);// 7、设置水印文字透明度g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,0.5f));if (null != degree) {g.rotate(Math.toRadians(degree),(double) bufImg.getWidth() / 2, (double) bufImg.getHeight() / 2);}int fontLength = getWatermarkLength(waterMarkContent, g);// 实际生成的水印文字,实际文字行数Double textLineCount = Math.ceil(Integer.valueOf(fontLength).doubleValue() / Integer.valueOf(srcImgWidth).doubleValue());// 实际所有的水印文字的高度int textHeight = textLineCount.intValue() * fontSize;// 相对与X的起始的位置int originX = 0;// 相对与Y的起始的位置int originY = 0;// 实际文字大于1行,则x则为默认起始0,if (1 == textLineCount.intValue()) {// 实际文字行数是1,1/2个图片高度,减去1/2个字符高度originY = srcImgHeight / 2 - fontSize / 2;// 实际文字行数是1,计算x的居中的起始位置originX = (srcImgWidth - fontLength) / 2;} else {// 实际文字行数大于1,1/2个图片高度减去文字行数所需的高度originY = (srcImgHeight - textHeight) / 2;}System.out.println("水印文字总长度:" + fontLength + ",图片宽度:" + srcImgWidth + ",字符个数:" + waterMarkContent.length());//文字叠加,自动换行叠加int tempX = originX;int tempY = originY;int tempCharLen = 0;//单字符长度int tempLineLen = 0;//单行字符总长度临时计算StringBuffer stringBuffer = new StringBuffer();for (int i = 0; i < waterMarkContent.length(); i++) {char tempChar = waterMarkContent.charAt(i);tempCharLen = getCharLen(tempChar, g);if (tempLineLen >= srcImgWidth) {// 绘制前一行g.drawString(stringBuffer.toString(), tempX, tempY);//清空内容,重新追加stringBuffer.delete(0, stringBuffer.length());//文字长度已经满一行,Y的位置加1字符高度tempY = tempY + fontSize;tempLineLen = 0;}//追加字符stringBuffer.append(tempChar);tempLineLen += tempCharLen;}//最后叠加余下的文字g.drawString(stringBuffer.toString(), tempX, tempY);g.dispose();return bufImg;}}

切记如果部署在linux的时候,水印中文乱码,则是缺少字体库,执行一下操作:

docker exec -it  containerID  /bin/bash //进入容器docker cp  /usr/local/javafonts/simhei.ttf  containerID:/usr/share/fonts/
docker cp  /usr/local/javafonts/simsun.ttc  containerID:/usr/share/fonts/

字体库位置:

File之图片添加水印文字相关推荐

  1. Java实现图片添加水印文字

    项目中遇到要在图片上添加水印文字,类似于像生日贺卡那种推送,就是有一张底图,然后我们需要动态替换掉上面名字,性别,部门啥的给公司人员推送一个生日祝福,一开始使用富文本和一些html转图片的工具来做,发 ...

  2. java图片添加水印文字

    jAVA图片中添加文字水印(铺满整个图片) package com.zhuozhengsoft.mark; import java.awt.AlphaComposite; import java.aw ...

  3. 图片添加水印文字方法 图片批量添加水印教程

    为了防止图片被别人盗用,我们经常给图片添加自己的水印,使用Ps添加水印,但是需要要一张一张的添加,非常麻烦,所以给你大家介绍一个快速批量添加水印的方法. 使用工具:图片水印添加大师 第一步打开&quo ...

  4. java 给图片添加水印文字

    介绍 1.考入代码 2.更具业务需求跳转 3.配置水印位置 4.配置水印内容 5.执行服务 测试的时候 1.直接替换图片一即可 2.图片二可以设置图片地址,输出到的位置 代码 package com. ...

  5. java 图片添加水印(文字水印+图片水印)

    一.图片水印(水印文件覆盖到源文件上) /*** @param buffImg 源文件(BufferedImage)* @param waterImg 水印文件(BufferedImage)* @pa ...

  6. JAVA给图片添加水印,java初级面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  7. java实现word,pdf,excel,图片添加水印

    gitee项目地址:https://gitee.com/betelnutandwine/meutilswatermark: java实现pdf,word,excel,ppt,图片加水印 jar地址:s ...

  8. Java分享--给图片添加文字水印(文字可旋转)

    这篇文章主要介绍了Java实现给图片添加文字水印,文字水印的方法,涉及java针对图片的读取.水印添加设置等相关操作技巧,需要的朋友可以参考下 . 很多时候项目中的图片需要一定的版权,就是人家拿出去用 ...

  9. java实现给图片添加水印(合成图片)

    // 水印文字字体     private static Font font = new Font("宋体", Font.BOLD, 72);     // 水印文字颜色      ...

最新文章

  1. 中国开源大爆发进行时,你没掉队吧?
  2. ps抠头发插件_PS顶级抠图插件Topaz Mask AI 1.0.2!支持2020Win/Mac,转发领取
  3. WGAN-div:默默无闻的WGAN填坑者 | 附开源代码
  4. DS5020配置集群存储
  5. python-带返回值的装饰器
  6. web前端入门到实战:CSS3两大实用属性,以及网页制作技巧
  7. 织梦支持php版本,DedeCMS不支持PHP5.3、5.4及以上版本后台500错误白屏的解决方法...
  8. java 导出EXcel数据
  9. 7 tips for using UIWebView
  10. 博客迁移到sunface.io
  11. 打开计算机 显示不支持此接口,新装的电脑系统,打开图片提示不支持此接口!怎么解决!...
  12. 无损音乐知识收集1(转)
  13. 新款苹果手机_入手新款苹果手机半个月 他们这样评价新手机
  14. Android各版本分布
  15. 【组合逻辑电路】如何从真值表中求解逻辑函数?
  16. cocos2dx显示html,cocos2dx-js 初探 整体流程helloworld.html分析(示例代码)
  17. C语言和设计模式大全(附代码示例)
  18. ssis的數據分流,mark一下
  19. 龙德广场爱心公益行,走进昌平区流村孤儿院
  20. 类(课堂作业参考答案)

热门文章

  1. 一个好看美观的登录注册界面的实现
  2. 超简单版模拟实现银行中用户存取款业务
  3. keras实现双向循环RNN,豆瓣电视剧评论情感分析
  4. 《动手学深度学习》PDF 开源了(全中文,支持 Jupyter 运行) ——PyTorch 版
  5. C语言计算器为什么无法计算除法,算不了除法,为什么?
  6. BigPipe和微前端
  7. 牛客网项目5:登录、退出功能
  8. 在拆下一切之后,我好像找到了 Reno 把 10 倍混合光学变焦不凸起塞入了手机的秘密...
  9. easyExcel 导出海量数据
  10. FreeSwitch配置ODBC