使用thumbnailator给图片加水印
引入方式:Maven
<dependency> <groupId>net.coobird</groupId> <artifactId>thumbnailator</artifactId> <version>0.4.8</version> </dependency>
这个是谷歌的一个开源项目
https://github.com/coobird/thumbnailator
需要注意,自从2014年发布了0.4.8版本以后,不再更新
/** * 添加水印后,输出文件到path * @param is 原图的输入流 * @param markImg 水印图片 * @param path 输出路径 * @throws IOException */ public static void markPicToFile(InputStream is,File markImg,String path) throws IOException { BufferedImage image = ImageIO.read(is); BufferedImage markImage = ImageIO.read(markImg); //原图的宽高 int imgWidth = image.getWidth(null); int imgHeight = image.getHeight(null); //水印图片的宽高 int markWidth = markImage.getWidth(null); int markHeight = markImage.getHeight(null); //计算输出水印图片的位置x和y轴 int mark_x = imgWidth - imgWidth / 9; int mark_y = imgWidth / 9-imgWidth / 10; //计算输出水印图片的大小 int mark_width = imgWidth / 10; int mark_height = (imgWidth * markHeight) / (10 * markWidth); //将水印图片压缩成输出的大小 markImage = Thumbnails.of(markImage).size(mark_width,mark_height).asBufferedImage(); //watermark(位置,水印图,透明度0.5f=50%透明度) //outputQuality(控制图片的质量,1f=100%高质量) Thumbnails.of(image)
.size(imgWidth, imgHeight)
.watermark(new Coordinate(mark_x,mark_y), markImage, 1f)
.outputQuality(1f).toFile(path);
}
水印图片的大小,我是按原图的比例进行压缩,是原图的十分之一,水印位置是右上角