java 压缩图片 图片转换为base64

/**
 * 根据指定大小压缩图片
 *
 * @param imagePath  源图片地址(网络地址)
 * @param desFileSize 指定图片大小,单位kb
 * @param imageId     影像编号
 * @return 压缩质量后的图片字节数组
 */

public static String compressPicForScale(String imagePath, long desFileSize, String imageId) {
    BASE64Encoder encoder = new BASE64Encoder();
    byte[] data = getBytesFromHost(imagePath);

    System.out.println("原始数据大小=======" + data.length);

    if (data.length < desFileSize * 1024) {
        return encoder.encode(data);
    }

    long srcSize = data.length;
    double accuracy = getAccuracy(srcSize / 1024);

    try {
        while (data.length > desFileSize * 1024) {
            ByteArrayInputStream inputStream = new ByteArrayInputStream(data);
            ByteArrayOutputStream outputStream = new ByteArrayOutputStream(data.length);
            Thumbnails.of(inputStream)
                    .scale(accuracy)
                    .outputQuality(accuracy)
                    .toOutputStream(outputStream);
            data = outputStream.toByteArray();

        }
        logger.info("【图片压缩】imageId={} | 图片原大小={}kb | 压缩后大小={}kb",
                imageId, srcSize / 1024, data.length / 1024);
    } catch (Exception e) {
        logger.error("【图片压缩】msg=图片压缩失败!", e);
    }
    System.out.println("原始数据后=======" + data.length);

    return encoder.encode(data);
}

 

//将网络地址对应的图片转换为base64
public static String imageChangeBase64(String imagePath){
    InputStream inputStream = null;
    byte[] data = getBytesFromHost(imagePath);
    System.out.println("length======= " + data.length);

    // 加密
    BASE64Encoder encoder = new BASE64Encoder();
    return encoder.encode(data);
}
 /**
     * url :   图片路径  : 找到一张图片复制链接地址
     *       desFileSize 指定图片大小,单位kb
     *      * @param imageId     影像编号
     *      * @return 压缩质量后的图片字节数组
     * @param args
     */
    public static void main(String[] args) {
        System.out.println("你还会或或或");
//        String url = "";
//        System.out.println(ImageUtil.imageChangeBase64(url));

        String s = compressPicForScale("https://ss0.bdstatic.com/94oJfD_bAAcT8t7mm9GUKT-xh_/timg?image&quality=100&size=b4000_4000&sec=1564025725&di=0c930fc21fbf99af3d731d74f9258631&src=http://photo14.zastatic.com/images/photo/8917/35665191/1313658915191.jpg", 2, "30");
       // System.out.println("压缩后数据大小" + s);

    }
  /**
     * 自动调节精度(经验数值)
     *
     * @param size 源图片大小
     * @return 图片压缩质量比
     */
    private static double getAccuracy(long size) {
        double accuracy;
        if (size < 900) {
            accuracy = 0.85;
        } else if (size < 2047) {
            accuracy = 0.6;
        } else if (size < 3275) {
            accuracy = 0.44;
        } else {
            accuracy = 0.4;
        }
        return accuracy;
    }

成功效果: 

原始数据大小=======15768
原始数据后=======1858

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值