使用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);
}

水印图片的大小,我是按原图的比例进行压缩,是原图的十分之一,水印位置是右上角

 

posted @ 2019-12-11 11:20  suruozhong  阅读(1399)  评论(0编辑  收藏  举报