首页  

java图片格式转换及压缩     所属分类 tech 浏览量 76
图片处理库
net.coobird:thumbnailator:0.4.8

png 转 jpg , 缩放 , 适当降低质量



import net.coobird.thumbnailator.Thumbnails;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.*;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;

@RestController
public class ImgToolController {

    private static final String JPG = "jpg";
    private static final String PNG = "png";

    private static final String JPG_POSTFIX = ".jpg";
    private static final String PNG_POSTFIX  = ".png";

    private static final String SMALL  = "_small";


    @RequestMapping("/png2jpg")
    public String png2jpg(@RequestParam String srcfile) throws Exception {
        if(!srcfile.endsWith(PNG_POSTFIX)){
            return "srcfile must endsWith .png";
        }
        File input = new File(srcfile);
        BufferedImage image = ImageIO.read(input);

        String destfile = buildFileName(srcfile,JPG);
        File output = new File(destfile);
        ImageIO.write(image, JPG, output);

        return "png2jpg done,srcfile="+srcfile+",destfile="+destfile;
    }

    @RequestMapping("/jpg2png")
    public String jpg2png(@RequestParam String srcfile) throws Exception {
        if(!srcfile.endsWith(JPG_POSTFIX)){
            return "src file  must endsWith .jpg";
        }
        File input = new File(srcfile);
        BufferedImage image = ImageIO.read(input);

        String destfile = buildFileName(srcfile,PNG);
        File output = new File(destfile);
        ImageIO.write(image, PNG, output);

        return "jpg2png done,srcfile="+srcfile+",destfile="+destfile;
    }


    public static boolean isJPG(String file){
        return file.toLowerCase().endsWith(JPG_POSTFIX);
    }
    public static boolean isPNG(String file){
        return file.toLowerCase().endsWith(PNG_POSTFIX);
    }


    private static String pngToJpg(File file)throws Exception{
        if(!isPNG(file.getName())){
            throw new Exception("not png file");
        }
        BufferedImage image = ImageIO.read(file);
        String destfile = buildFileName(file.getAbsolutePath(),JPG);
        File output = new File(destfile);
        ImageIO.write(image, JPG, output);
        return destfile;
    }

    private static String buildNewFileName(String file,String postfix){
        int pos = file.lastIndexOf('.');
        return file.substring(0,pos) +postfix + file.substring(pos);
    }


    @RequestMapping("/compress")
    public Object compress(@RequestParam String workdir,@RequestParam float q,
                           @RequestParam(required = false,defaultValue ="1.0") float scale,
                           @RequestParam(required = false,defaultValue ="false") boolean png2jpg) throws Exception {

        if(StringUtils.isBlank(workdir)){
            return "workdir is blank";
        }
        if(q <= 0.01 || q >= 1.0){
            return "q error";
        }
        if(scale > 1.0 || scale< 0.1){
            return "scale error";
        }
        workdir = workdir.trim();
        File workdirFile = new File(workdir);
        if(!workdirFile.isDirectory()){
            return "not dir";
        }
        File[] fs = workdirFile.listFiles();
        if(fs.length > 20){
            return "too many files";
        }

        List< File> imgfiles = new ArrayList< >();
        for(File file:fs){
            String name = file.getName();
            if(name.contains(SMALL)){
                continue;
            }
            if(isPNG(name) || isJPG(name)){
                imgfiles.add(file);
            }
        }
        if(imgfiles.isEmpty()){
            return "no jpg and png file";
        }

        for(File file:imgfiles){
            String name = file.getAbsolutePath();

            if(isPNG(name) && png2jpg){
                name = pngToJpg(file);
            }
            String destfile = buildNewFileName(name,"_small");
            Thumbnails.of(new File(name))
                    .scale(scale)
                    .outputQuality(q)
                    .toOutputStream(new FileOutputStream(destfile));
        }


        return "compress done,count="+imgfiles.size()+",q="+q+",scale="+scale+",png2jpg="+png2jpg;
    }

    private static String buildFileName(String name,String type){
        int pos = name.lastIndexOf('.');
        return name.substring(0,pos) +'.' + type;
    }

}






https://gitee.com/dyyx/work2024/blob/master/demo/appdemo/src/main/java/demo/controller/ImgToolController.java http://127.0.0.1:8090/jpg2png?srcfile=/Users/dugang/Downloads/001.jpg http://127.0.0.1:8090/png2jpg?srcfile=/Users/dugang/Downloads/001_1.png http://127.0.0.1:8090/compress?workdir=/Users/dugang/tmp/x/&q=0.3 http://127.0.0.1:8090/compress?workdir=/Users/dugang/tmp/x/&q=0.3&scale=0.3 http://127.0.0.1:8090/compress?workdir=/Users/dugang/tmp/x3/&q=0.3

上一篇     下一篇
内网映射方案 lanproxy

鸡兔同笼应用题

redis 哨兵集群 和 cluster集群

流程图绘制工具 drawio

猪肉常见部位与做法

清炖牛腱子