SpringBoot 图片转换为 Webp

PNG 转 WebP 的压缩率要高于 PNG 原图压缩率,同样支持有损与无损压缩

转换后的 WebP 体积大幅减少,图片质量也得到保障(同时肉眼几乎无法看出差异)

转换后的 WebP 支持 Alpha 透明和 24-bit 颜色数,不存在 PNG8 色彩不够丰富和在浏览器中可能会出现毛边的问题

WebP 的优势体现在它具有更优的图像数据压缩算法,能带来更小的图片体积,而且拥有肉眼识别无差异的图像质量;同时具备了无损和有损的压缩模式、Alpha 透明以及动画的特性,在 JPEG 和 PNG 上的转化效果都非常优秀、稳定和统一。

废话不多说直接上代码。

Maven依赖 必要

<dependency>

  <groupId>com.github.gotson</groupId>

  <artifactId>webp-imageio</artifactId>

  <version>0.2.2</version>

</dependency>

2. Java 转换工具类

package com.clearsky.common.util;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.stereotype.Component;

import org.springframework.web.multipart.MultipartFile;

import javax.imageio.ImageIO;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;

import java.util.UUID;

@Component

public class UploadUtil {

    //此处为自行在 application.yml 配置的目录,请根据需求酌情修改

    @Value("${system.file}")

    private String path;

    //保存图片为 webp

    public String saveImage(MultipartFile mFile) throws IOException {

        var file = saveFile(mFile);//先将图片保存至本地

        File webpFile = new File(path+file+".webp");

        //注: BufferedImage 返回 null 是未在 pom.xml 中添加依赖

        BufferedImage bufferedImage = ImageIO.read(new File(path+file));

        ImageIO.write(bufferedImage,"webp", webpFile);

        new File(path+file).deleteOnExit();//删除原文件

        return file+".webp";

    }

    //保存文件至本地

    public String saveFile(MultipartFile file) throws IOException {

        String[] fileStr = file.getOriginalFilename().split("\\.");

        String suffix =  fileStr[fileStr.length - 1];

        String fileName = UUID.randomUUID().toString().replace("-","");

        String filePath = path+fileName+"."+suffix;

        File desFile = new File(filePath);

        if(!desFile.getParentFile().exists()){

            desFile.mkdirs();

        }

        file.transferTo(desFile);

        return fileName+"."+suffix;

    }

}

注: 也可以直接将 MultipartFile 转换为 File 后直接保存 webp 格式文件.

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容