springboot整合thumbnailator实现图片处理

图片处理

在项目开发中,我们总是会遇到一些情况,需要接受客户端上传的图片,而客户端上传的图片总是格式不一致,为了方便存储,我们需要对图片进行一些统一处理,如大小压缩,质量压缩,透明度处理,添加水印等等操作。

这时候我们就需要一个工具来帮助我们完成这些事情,而thumbnailator就一个这样的工具。

thumbnailator简介

Thumbnailator 是一个优秀的图片处理的Google开源Java类库。处理效果远比Java API的好。从API提供现有的图像文件和图像对象的类中简化了处理过程,两三行代码就能够从现有图片生成处理后的图片,且允许微调图片的生成方式,同时保持了需要写入的最低限度的代码量。还支持对一个目录的所有图片进行批量处理操作。

支持的处理操作:图片缩放,区域裁剪,水印,旋转,保持比例。

springboot整合thumbnailator

1.引入maven依赖

        <dependency>
            <groupId>net.coobird</groupId>
            <artifactId>thumbnailator</artifactId>
            <version>0.4.8</version>
        </dependency>

2.编写工具类

package cn.lzx.university_shop.utils;

import cn.lzx.university_shop.dto.ImageTemp;
import net.coobird.thumbnailator.Thumbnails;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

/**
 * 图片处理工具类
 */
public class ImageUtils {

    private static final SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
    private static final Random r = new Random();
    private static Logger logger = LoggerFactory.getLogger(ImageUtils.class);

    //将前端传来的CommonsMultipartFile转换成File
    public static File transToFile(MultipartFile cfile){
        String filename = cfile.getOriginalFilename();
        File file = new File(filename);
        try {
            cfile.transferTo(file);
        } catch (IOException e) {
            e.printStackTrace();
            logger.error("图片转换失败:"+e.toString());
        }
        return file;
    }

    //上传图片
    public static String saveImg(ImageTemp imageTemp, String targetAddr) throws IOException {
        //对新生成的文件进行相应处理 规范文件名
        String newFileName = getRandomFileName();
        String extension = getFileExtension(imageTemp.getImgName());
        makeDirPath(targetAddr);
        String realAddr = targetAddr + newFileName + extension;
        //目标文件
        File dest = new File(PathUtils.getImgBasePath()+realAddr);
        Thumbnails.of(imageTemp.getInputStream()).size(200,200)
                    .outputQuality(0.8f)
                    .toFile(dest);
        return PathUtils.getImgBasePath()+realAddr;
    }

    //删除图片
    /**
     * storePath是文件路径还是目录路径
     * 如果是文件路径则删除该文件
     * 如果是目录路径则删除该目录下所有文件
     * @param storePath
     */
    public static void deleteImg(String storePath){
        File fileOrDire = new File(PathUtils.getImgBasePath()+storePath);
        if (fileOrDire.exists()){
            if (fileOrDire.isDirectory()){
                //是目录路径 删除全部文件
                File[] files = fileOrDire.listFiles();
                for (File file : files){
                    file.delete();
                }
            }
            //是文件
            fileOrDire.delete();
        }
    }


    //创建目标路径上的目录
    private static void makeDirPath(String targetAddr) {
        String realPath = PathUtils.getImgBasePath()+targetAddr;
        File dir = new File(realPath);
        if (!dir.exists()){
            dir.mkdirs();
        }
    }

    //获取文件扩展名
    private static String getFileExtension(String ImageName) {
        return ImageName.substring(ImageName.lastIndexOf("."));
    }

    //生成随机的文件名  随机五位数 + 时间
    private static String getRandomFileName() {
        //获取随机五位数
        int randnum = r.nextInt(89999) + 10000;
        String nowTime = sDateFormat.format(new Date());
        return nowTime + randnum;
    }


    //Demo
    public static void main(String[] args) throws IOException {
        Thumbnails.of(new File("G:\\001.jpg"))
                .size(200,200)
                .outputQuality(0.8f)
                .toFile("C:\\Users\\67409\\Desktop\\图片\\商品缩略图\\demo2.jpg");
    }

}

 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值