thumbnailator个人使用笔记

导包 就不解释了

<properties>
	<thumbnailator.version>0.4.8</thumbnailator.version>
</properties>
<dependencies>
	<!-- thumbnailator 谷歌图片压缩工具 -->
	 <dependency>
	     <groupId>net.coobird</groupId>
	     <artifactId>thumbnailator</artifactId>
	     <version>${thumbnailator.version}</version>
	 </dependency>
</dependencies>

使用thumbnailator给原图添加水印

// 原图片地址
        String imageUrl = "C:/Users/Administrator/Desktop/墨花.jpg";
        // 水印图片 相对于resource目录
        String watermark = "C:/Users/Administrator/Desktop/水印.jpg";
        // 输出到文件
        String outputFile = "C:/Users/Administrator/Desktop/test.jpeg";
        // 不透明度
        float opacity = 0.25f;
        try {
            // 获取原图文件
            File file = new File(imageUrl);
            // ImageIO读取图片
            BufferedImage image = ImageIO.read(file);

            File sy_file = new File(watermark);
            // ImageIO读取图片
            BufferedImage sy_image = ImageIO.read(sy_file);

            Thumbnails.of(image)
                    // 设置图片大小
                    .size(image.getWidth(), image.getHeight())
                    // 加水印 参数:1.水印位置 2.水印图片 3.不透明度0.0-1.0
                    .watermark(Positions.BOTTOM_LEFT, sy_image, opacity)
                    // 输出到文件
                    .toFile(outputFile);
        } catch (Exception e){
            LogPrintUtil.logRunTimeError(e);
        }

效果:
原图:
在这里插入图片描述
水印:
在这里插入图片描述
结果:(水印使用的图片是jpg的所有它不是透明背景,所有这个水印加的有点不好看,读者见谅)
在这里插入图片描述

本人刚2020-5-13踩的坑,当天解决,图片以字节流形式添加水印。水印用的是远程图片。代码如下:

/*
     * 功能描述:
     * 〈图片加水印〉
     *
     * @param io 1
     * @param watermarkPath 2
     * @param positions 3
     * @param opacity 4
     * @param is_compression 5
     * @return : java.io.ByteArrayInputStream
     * @author : ljq-刘俊秦
     * @date : 2020/5/12 0012 下午 7:12
     */
    public static ByteArrayInputStream addWatermarkUrl(
            InputStream io,
            String watermarkPath,
            Position positions,
            float opacity

    ) {

        try {
            var os = new ByteArrayOutputStream();
            // ImageIO读取图片
            BufferedImage image = ImageIO.read(io);
            //水印图片 取url图片
            URL url = new URL(watermarkPath);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            //设置请求方式为"GET"
            conn.setRequestMethod("GET");
            //超时响应时间为5秒
            conn.setConnectTimeout(5 * 1000);
            //通过输入流获取图片数据
            var watermarkIo = conn.getInputStream();
            // ImageIO读取图片
            BufferedImage sy_image = ImageIO.read(watermarkIo);
            Thumbnails.of(image)// 设置图片大小
                    .size(image.getWidth(), image.getHeight())
                    // 加水印 参数:1.水印位置 2.水印图片 3.不透明度0.0-1.0
                    .watermark(
                            positions,
                            sy_image,
                            opacity
                    )
                    .outputFormat("png") //流是图片BufferedImageSource 必须定义类型。不然报错 定义输出图片类型
                    // 输出到输出流
                    .toOutputStream(os);
            var bio = new ByteArrayInputStream(os.toByteArray());

            //用完关掉
            os.close();
            io.close();
            watermarkIo.close();

            return bio;
        } catch (Exception e) {
            LogPrintUtil.logRunTimeError(e);
            return null;
        }
    }

文件压缩

本人用的是字节流形式,读者可自行改写。

/*
     * 功能描述:
     * 〈图片大于1M的就进行压缩〉
     *
     * @param io 1
     * @return : java.io.ByteArrayInputStream
     * @author : ljq-刘俊秦
     * @date : 2020/5/12 0012 下午 7:12
     */
    public static ByteArrayInputStream imgHalfCompression(InputStream io) {
        try {
            ByteArrayOutputStream os = new ByteArrayOutputStream();
            //判断是否是图片,是否大于1M
            if (io.available() > 1024) {
                //处理图片进行压缩
                Thumbnails.of(io)
                        .scale(1f)
                        .outputQuality(0.5f)
                        .toOutputStream(os);
            }
            var bio = new ByteArrayInputStream(os.toByteArray());

            io.close();
            os.close();

            return bio;
        } catch (Exception e) {
            LogPrintUtil.logRunTimeError(e);
            return null;
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尘叶风凌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值