用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实现给图片增加图片水印或者文字水印相关依赖包。
java程序对图片加水印效果,比较简单 把需要加水印的图片替代原来的图片就可以了,在代码里头可以修改水印的字
《java实现图片加水印.txt》里面装的都是给图片加水印的代码和讲解,很好资源哦
Java 实现word文件增加图片水印 jacob实现 用到的jar itextpdf-5.5.2和 jacob
图片操作类源代码,该类主要用于给图片进行缩放、加水印和得到图片的高、宽及类型。 具体操作请自己参照方法说明自己测试改写。
java给图片添加水印,网站开发过程中可能需要对上传的图片添加属于本网站的水印,这是一个工具类,能实现添加文字水印和添加图片水印。
java操作excel实现水印图片
java实现图片加水印 工具类!!!以后不用手动敲代码了
struts2 上传 java 图片水印 改变图片大小
水印 java Graphics2D实现文字图片水印 实现水印四个角水印
java Jacob完美实现word添加图片水印(内附源码及jar包)。 公司最近让搞Word文档添加水印,所有下载的文档需要添加公司印章,搞了好多天才实现,利用Jacob完美实现word添加图片水印(注意需要把dll文件放到jdk的bin...
springboot实现上传图片添加水印
Java给图片加水印地方法简单实用,可以实现个文件加个章的功能!
实现在图片上加水印效果的例子源码,可以配合验证码实现
util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码加以...
java实现图片上传并添加水印效果(文字水印,蒙版,logo图片),自动进行文字大小行数位置匹配,文字自动换行
实现图片填加水印的效果,网上找的很不错,可以借鉴一下