用java api实现的版本:
import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.Image; import java.awt.RenderingHints; import java.awt.Transparency; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import javax.imageio.ImageIO; import javax.swing.ImageIcon; public class ImgMarkUtil { /** * 给图片添加水印、可设置水印图片旋转角度 * @param iconPath 水印图片路径 * @param srcImgPath 源图片路径 * @param targerPath 目标图片路径 * @param degree 水印图片旋转角度 */ public static void markImgByIcon(String iconPath, String srcImgPath, String targetPath, Integer degree) { try { Image srcImg = ImageIO.read(new File(srcImgPath)); BufferedImage buffImg = new BufferedImage(srcImg.getWidth(null), srcImg.getHeight(null), BufferedImage.TYPE_INT_RGB); Graphics2D g = (Graphics2D)buffImg.getGraphics(); //得到画笔对象 String srcImgType = srcImgPath.substring(srcImgPath.lastIndexOf(".")+1); //如果原图为png或gif格式,设置背景透明 if("png".equalsIgnoreCase(srcImgType) || "gif".equalsIgnoreCase(srcImgType)) { buffImg = g.getDeviceConfiguration().createCompatibleImage(srcImg.getWidth(null), srcImg.getHeight(null), Transparency.TRANSLUCENT); g.dispose(); g = buffImg.createGraphics(); } g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); //设置对线段的锯齿状边缘处理 g.drawImage(srcImg, 0, 0, null); //画原图 if (null != degree) { g.rotate(Math.toRadians(degree), (double) buffImg.getWidth() / 2, (double) buffImg.getHeight() / 2); //设置水印旋转 } //水印图象的路径,水印一般为gif或者png的,这样可设置透明度 ImageIcon imgIcon = new ImageIcon(iconPath); Image img = imgIcon.getImage(); float alpha = 0.7f; //透明度 g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha)); //设置水印透明度 g.drawImage(img, buffImg.getWidth()-img.getWidth(null)-10, buffImg.getHeight()-img.getHeight(null)-10, null);//画水印 g.setComposite(AlphaComposite.SrcOver); //设置回默认值SrcOver g.dispose(); ImageIO.write(buffImg, srcImgType, new File(targetPath));// 生成图片 } catch (Exception e) { e.printStackTrace(); } } }
除了自己实现,还可以直接用开源的thumbnailator,代码如下:
import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; import net.coobird.thumbnailator.Thumbnails; import net.coobird.thumbnailator.geometry.Positions; public class ImgMarkUtil { /** * 给图片添加水印、可设置水印图片旋转角度 * @param iconPath 水印图片路径 * @param srcImgPath 源图片路径 * @param targerPath 目标图片路径 * @param degree 水印图片旋转角度 */ public static void markImgByIcon(String iconPath, String srcImgPath, String targetPath, Integer degree) { try { BufferedImage originalImage = ImageIO.read(new File(srcImgPath)); BufferedImage watermarkImage = ImageIO.read(new File(iconPath)); BufferedImage thumbnail = Thumbnails.of(originalImage) .size(originalImage.getWidth(), originalImage.getHeight()) .watermark(Positions.BOTTOM_RIGHT, watermarkImage, 0.7f) .asBufferedImage(); String srcImgType = srcImgPath.substring(srcImgPath.lastIndexOf(".")+1); ImageIO.write(thumbnail, srcImgType, new File(targetPath)); } catch (Exception e) { e.printStackTrace(); } } }
相关推荐
自己写的一个给图片加水印的类,我在企业里工作,一般涉及到给图片加水印的需求,都是用的这个类,很好用的,就传上来,大家分享一下,为了可阅读性,注释打的很详细,封装的很好,大家看看吧,有什么问题可以问我的...
图片加水印 java代码实现
开发一个项目,需要用到图片加水印的功能,这里考虑使用后台加水印,在上传的时候或者回显到页面时候,取图片文件的流数据,进行加水印在返回流数据就行了,非常简单,不懂可以问我
总结一下,Java 2D API和JAI库都能帮助我们实现图片加水印的功能。选择哪种方式取决于具体需求,如性能、复杂性和可用资源。理解这些概念和步骤,开发者就能根据实际情况编写出自己的Java代码,实现个性化的图片水印...
在Java编程中,给图片添加水印是一项常见的需求,无论是为了版权保护还是...但以上代码已经足够作为基础,帮助你开始在Java中实现图片加水印的功能。记得在运行此代码前,确保已经正确引入了Apache Commons Imaging库。
通过上述分析,我们可以看到Java实现图片加水印主要涉及到了文件输入输出、图像处理、图形绘制等多个方面的知识。掌握了这些技术,不仅能够帮助开发者完成简单的图片加水印任务,还能进一步扩展到更为复杂的图像处理...
java操作excel实现水印图片
图片操作类源代码,该类主要用于给图片进行缩放、加水印和得到图片的高、宽及类型。 具体操作请自己参照方法说明自己测试改写。
在Java编程语言中,给图片添加水印是一项常见的任务,特别是在网站开发中,为了保护版权或者标识来源,经常需要在用户上传的图片上添加特定的文字或图像水印。以下将详细讲解如何使用Java来实现这一功能。 首先,...
在Java编程领域,图片处理是一项常见的任务,包括添加水印、改变图片大小等。这里我们将深入探讨这些知识点,以及如何在Struts2框架下实现它们。 首先,让我们了解"图片水印"。水印通常用于保护版权或者为图片增加...
这个“java图片加水印工具类”正是为了简化这一过程而设计的,它允许开发者通过调用预定义的方法,快速地在图片上添加文字或图形水印,无需每次都手动编写相同的功能代码。 首先,我们需要了解什么是水印。水印通常...
在处理文档操作时,Java提供了一些库来实现高级功能,比如在Word文档中添加图片水印。本篇将深入探讨如何使用Java和两个特定的库——iTextPDF与Jacob——来实现这一目标。 首先,iTextPDF是一个开源的Java库,专门...
1. **图片加水印**: - **基本概念**:水印是一种在图片上添加不可见或可见的标记,用于证明所有权、版权或者为图片增添额外信息。在Java中,可以通过Java的图像处理库如Java AWT或JavaFX来实现。 - **实现步骤**...
"Java给图片加水印"这个主题,就是关于如何利用Java技术在图片上添加标识或文字,以保护版权或者增强视觉效果。下面我们将深入探讨这个话题。 首先,我们需要了解Java中的图像处理库,如Java Advanced Imaging (JAI...
java Jacob完美实现word添加图片水印(内附源码及jar包)。 公司最近让搞Word文档添加水印,所有下载的文档需要添加公司印章,搞了好多天才实现,利用Jacob完美实现word添加图片水印(注意需要把dll文件放到jdk的bin...
下面将详细介绍如何使用Java Graphics2D实现文字和图片水印,以及如何在四个角落添加水印。 首先,我们要导入必要的Java库,包括java.awt和javax.imageio: ```java import java.awt.*; import java.awt.image....
针对"java 加水印 支持各种格式pdf doc 图片"这个主题,我们将深入探讨如何在Java中为PDF、DOC文档以及图片添加水印。 首先,让我们来看PDF文件的水印处理。PDF文档由于其跨平台性和阅读体验,被广泛应用。在Java中...
在Spring Boot框架中实现图片上传并添加水印的功能,是一个常见的需求,特别是在开发涉及多媒体内容的Web应用时。下面将详细介绍这个过程,并涵盖相关的技术点。 首先,我们需要了解Spring Boot如何处理文件上传。...
在Java编程中,实现图片上传并添加水印效果是一项常见的任务,这通常涉及到图像处理、图形用户界面(GUI)和文件I/O等多个方面。在这个项目中,我们将关注以下几个关键知识点: 1. **Java图像处理库**:Java标准库...
在Java开发中,导出PDF、添加表格以及加水印是常见的需求,这些功能可以用于创建报告、发票、证书等文档。PDF(Portable Document Format)是一种广泛应用的文档格式,能够跨平台保持一致的布局和样式。下面将详细...