一 点睛

给图片加水印是一种常见的防伪技术,在此提供一个图片水印工具类。

二 代码package com.imooc.demo.common.util;

import javax.imageio.ImageIO;

import javax.swing.*;

import java.awt.*;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.FileOutputStream;

import java.io.InputStream;

import java.io.OutputStream;

/**

* @className: ImagemarkUtils

* @description: 图片水印工具类

* @date: 2020/8/20

* @author: cakin

*/

public class ImagemarkUtils {

// 水印透明度

private static float alpha = 0.5f;

// 水印横向位置

private static int positionWidth = 150;

// 水印纵向位置

private static int positionHeight = 300;

// 水印文字字体

private static Font font = new Font("宋体", Font.BOLD, 72);

// 水印文字颜色

private static Color color = Color.red;

/**

* @param alpha 水印透明度

* @param positionWidth 水印横向位置

* @param positionHeight 水印纵向位置

* @param font 水印文字字体

* @param color 水印文字颜色

*/

public static void setImageMarkOptions(float alpha, int positionWidth, int positionHeight, Font font, Color color) {

if (alpha != 0.0f)

ImagemarkUtils.alpha = alpha;

if (positionWidth != 0)

ImagemarkUtils.positionWidth = positionWidth;

if (positionHeight != 0)

ImagemarkUtils.positionHeight = positionHeight;

if (font != null)

ImagemarkUtils.font = font;

if (color != null)

ImagemarkUtils.color = color;

}

/**

* 给图片添加水印图片

*

* @param iconPath 水印图片路径

* @param srcImgPath 源图片路径

* @param targerPath 目标图片路径

*/

public static void markImageByIcon(String iconPath, String srcImgPath, String targerPath) {

markImageByIcon(iconPath, srcImgPath, targerPath, null);

}

/**

* 给图片添加水印图片、可设置水印图片旋转角度

*

* @param iconPath 水印图片路径

* @param srcImgPath 源图片路径

* @param targerPath 目标图片路径

* @param degree 水印图片旋转角度

*/

public static void markImageByIcon(String iconPath, String srcImgPath, String targerPath, Integer degree) {

OutputStream os = null;

try {

Image srcImg = ImageIO.read(new File(srcImgPath));

BufferedImage buffImg = new BufferedImage(srcImg.getWidth(null), srcImg.getHeight(null),

BufferedImage.TYPE_INT_RGB);

// 1、得到画笔对象

Graphics2D g = buffImg.createGraphics();

// 2、设置对线段的锯齿状边缘处理

g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);

g.drawImage(srcImg.getScaledInstance(srcImg.getWidth(null), srcImg.getHeight(null), Image.SCALE_SMOOTH), 0, 0, null);

// 3、设置水印旋转

if (null != degree) {

g.rotate(Math.toRadians(degree), (double) buffImg.getWidth() / 2, (double) buffImg.getHeight() / 2);

}

// 4、水印图片的路径 水印图片一般为gif或者png的,这样可设置透明度

ImageIcon imgIcon = new ImageIcon(iconPath);

// 5、得到Image对象。

Image img = imgIcon.getImage();

g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));

// 6、水印图片的位置

positionWidth = srcImg.getWidth(null) - imgIcon.getIconWidth() > 0 ? srcImg.getWidth(null) - imgIcon.getIconWidth() : 0;

positionHeight = srcImg.getHeight(null) - imgIcon.getIconHeight() > 0 ? srcImg.getHeight(null) - imgIcon.getIconHeight() : 0;

g.drawImage(img, positionWidth, positionHeight, null);

g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));

// 7、释放资源

g.dispose();

// 8、生成图片

os = new FileOutputStream(targerPath);

ImageIO.write(buffImg, "JPG", os);

System.out.println("图片完成添加水印图片");

} catch (Exception e) {

e.printStackTrace();

} finally {

try {

if (null != os)

os.close();

} catch (Exception e) {

e.printStackTrace();

}

}

}

/**

* 给图片添加水印文字

*

* @param logoText 水印文字

* @param srcImgPath 源图片路径

* @param targerPath 目标图片路径

*/

public static void markImageByText(String logoText, String srcImgPath, String targerPath) {

markImageByText(logoText, srcImgPath, targerPath, null);

}

/**

* 给图片添加水印文字、可设置水印文字的旋转角度

*

* @param logoText 水印文字

* @param srcImgPath 源图片路径

* @param targerPath 目标图片路径

* @param degree 水印图片旋转角度

*/

public static void markImageByText(String logoText, String srcImgPath, String targerPath, Integer degree) {

InputStream is = null;

OutputStream os = null;

try {

// 1、源图片

Image srcImg = ImageIO.read(new File(srcImgPath));

BufferedImage buffImg = new BufferedImage(srcImg.getWidth(null), srcImg.getHeight(null),

BufferedImage.TYPE_INT_RGB);

// 2、得到画笔对象

Graphics2D g = buffImg.createGraphics();

// 3、设置对线段的锯齿状边缘处理

g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);

g.drawImage(srcImg.getScaledInstance(srcImg.getWidth(null), srcImg.getHeight(null), 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(logoText, positionWidth, positionHeight);

// 9、释放资源

g.dispose();

// 10、生成图片

os = new FileOutputStream(targerPath);

ImageIO.write(buffImg, "JPG", os);

System.out.println("图片完成添加水印文字");

} catch (Exception e) {

e.printStackTrace();

} finally {

try {

if (null != is)

is.close();

} catch (Exception e) {

e.printStackTrace();

}

try {

if (null != os)

os.close();

} catch (Exception e) {

e.printStackTrace();

}

}

}

/**

* 功能描述:给图片 c1.png 添加水印 c30.png

*

* @param args 参数

* @author cakin

* @date 2020/8/20

*/

public static void main(String[] args) {

String srcImgPath = "G:/photo/c1.png";

String iconPath = "G:/photo/c30.png";

System.out.println("给图片添加水印图片开始...");

ImagemarkUtils.setImageMarkOptions(0.3f, 1, 1, null, null);

// 给图片添加水印图片

ImagemarkUtils.markImageByIcon(iconPath, srcImgPath, srcImgPath);

// 给图片添加水印图片,水印图片旋转-45

// markImageByIcon(iconPath, srcImgPath, targerIconPath2, -45);

System.out.println("给图片添加水印图片结束...");

}

}

java 去掉图片水印文字_Java实现图片水印工具类相关推荐

  1. java文字水印换行_Java实现图片水印文字换行、平铺、旋转效果-Go语言中文社区...

    import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.Image; impo ...

  2. 给图片添加文字(换行)水印

    Android给图片添加半透明背景的水印 (水印带有半透明底色) 给图片添加文字(换行)水印 1.绘制富文本: /** * 绘制富文本* StaticLayout可实现换行* <p>* h ...

  3. Python往图片写入文字,插入图片的方法

    Python往图片写入文字,插入图片的方法 使用情景 效果 代码 使用情景 做短视频编辑的时候,经常需要向图片中写入一些文字,插入图片,以增加图片的美观.本文将介绍使用python的Pillow库,将 ...

  4. java 中间容器 表格_【JAVA SE基础篇】45.迭代器、Collections工具类以及使用容器存储表格...

    本文将要为您介绍的是[JAVA SE基础篇]45.迭代器.Collections工具类以及使用容器存储表格,具体完成步骤: 1.迭代器 迭代器为我们提供了统一遍历容器(List/Map/Set)的方式 ...

  5. Java操作大数据量Excel导入导出万能工具类(完整版)

    Java操作大数据量Excel导入导出万能工具类(完整版) 转载自:https://blog.csdn.net/JavaWebRookie/article/details/80843653 更新日志: ...

  6. java 获取两条经纬度线段的交点坐标工具类

    java 获取两条经纬度线段的交点坐标工具类 网上有线段是否相交的判断方法,但是很少有获取线段交点的坐标的方法 我在这里整合了网上的一些相交的方法,通过相交的xy轴点返推出了经纬度. 拾取坐标系统 可 ...

  7. html图片加文字批量处理,图片批量加水印工具,图片批量添加文字|图片同时添加文字或图片水印...

    一般在网上下载的图片都会自动带有相应网站的文字或是图片水印,虽然可能在使用图片素材的时候,图片上的水印会在一定程度上影响美观,但是水印是对于版权或者是原创的一个保护,图片水印不仅是可以保护别人的原创图 ...

  8. java 图片上写字_java 在图片上写字,两个图片合并的实现方法

    实例如下: package writeimg; import javax.imageio.ImageIO; import java.awt.Color; import java.awt.Font; i ...

  9. java图片转字符_java实现图片转字符图(看的过去的亚子)

    普通图片转换为ASSIC码灰度图片 原图: 效果图: 转换方法 读取图片文件到BufferedImage 读取BufferedImage中的RGB值 将RGB三色值按照(0.3,0.59,0.11)权 ...

  10. java获取图片的分辨率_Java读取图片分辨率

    代码依赖于其他工具包,下载请移步:http://download.csdn.net/detail/zhaoguoshuai91/9231957 废话不多说,直接上代码 public class Ima ...

最新文章

  1. mysql 5.6.15_mysql-5.6.15-win32.zip免安装配置
  2. GitHub使用教程for Eclipse
  3. 转: HTTP 错误 401.1 - 未经授权:访问由于凭据无效被拒绝的另类解决方案
  4. linux查看文件使用情况,linux查看文件句柄使用情况
  5. Exynos4412 ADC 设备驱动开发
  6. grep 两个字符串_Linux运维工程师想要的12个grep指令
  7. 体重 年龄 性别 身高 预测鞋码_计算体重指数时,需要以下()数据。A.性别B.年龄C.身高D.体重...
  8. [Hadoop] - Win7下提交job到集群上去
  9. 用于SAO Utils桌面网页挂件的Live2D看板娘
  10. Unity - 射线检测
  11. RabbitMQ基础
  12. 为什么计算机薪酬排名第一而不是临床医学?
  13. Javaweb生成族谱树形图
  14. Html Table 合并单元格
  15. java创建多个线程 延时1秒_Java 多线程(三)优化任务执行
  16. 异常:Subquery returns more than 1 row
  17. 瓦克美国多晶硅基地爆炸 多晶硅及硅片或涨价
  18. MyCat-web 可视化运维管理和监控平台
  19. call()和appy()的区别及常用场景
  20. cd src make install make[1]: Entering directory `/home/xuweiliang/redis/r 错误解析

热门文章

  1. Intel 网卡使用
  2. 算法竞赛入门经典-第五章错位输出
  3. 快手第三季营收231亿:同比增13% 期内亏损27亿
  4. Banner图片轮播器实现ViewPager图片切换效果及下方小圆点
  5. 基于SpringBoot的外卖点餐管理系统
  6. On the Sentence Embeddings from Pre-trained Language Models
  7. antd modal层级混乱
  8. Arcgis根据矢量道路数据来提取道路中心线
  9. 如何用html语言制作圆角矩形,webGL中圆角矩形的绘制
  10. 几行烂代码,我赔了16万。