java图片格式转换及压缩
所属分类 tech
浏览量 116
图片处理库
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
猪肉常见部位与做法
清炖牛腱子