图片水印 压缩图片 压缩图片200k以内的scale值算法 hutool 附代码

图片操作

情形

很多情况下,需求上对某个图片进行压缩或者添加水印,我们都会使用到这些图片处理的工具包。在大多工具包中,hutool无非是最好用的。

依赖

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.7.20</version>
</dependency>

缩放方法

ImgUtil.scale(File srcImageFile, File destImageFile, float scale);

这里的scale是缩放比例范围在[0,1]单精度值,数值越小压缩力度越大,在大多场景中,我们可能会对上传的图片做一个压缩处理,用于首页列表的展示,通常是在200KB左右,比如用户上传一个高达10MB的图片,当然不可以直接用于展示在客户端,那么我们可以将其压缩到200KB左右的链接用于展示,来减小流量浪费和服务器响应。这里的scale是一个经验值,通常是要花费大量的压缩实验的得出来的经验值。我也是花费了前后三十多次的出来压缩到200KB的scale的值,直接放出来↓

200KB的scale值算法

/**
     * 获取到200kb左右的压缩scale值
     * 一一手动校验值(经验值)
     *
     * @param srcSize 文件长度
     * @return scale
     */
    private static float scale200K(long srcSize) {
        float scale = 0f;
        if (srcSize < 200 * 1000) {
            scale = 1.00f;
        } else if (srcSize < 500 * 1000) {
            scale = 0.57f;
        } else if (srcSize < 700 * 1000) {
            scale = 0.47f;
        } else if (srcSize < 1 * 1000 * 1000) {
            scale = 0.37f;
        } else if (srcSize < 2 * 1000 * 1000) {
            scale = 0.25f;
        } else if (srcSize < 4 * 1000 * 1000) {
            scale = 0.17f;
        } else if (srcSize < 5 * 1000 * 1000) {
            scale = 0.13f;
        } else if (srcSize < 10 * 1000 * 1000) {
            scale = 0.10f;
        } else {
            scale = 0.01f;
        }
        return scale;
    }

添加水印

ImgUtil.pressImage(File srcImageFile, File destImageFile, Image pressImg, int x, int y, float alpha)

这个alpha是透明度值,越小越透明。

在线API

你可能感兴趣的:(基础,算法)