图片本地转webp
parent
ec25ddfa79
commit
2c0207ed82
@ -0,0 +1,83 @@
|
|||||||
|
package com.ruoyi.test;
|
||||||
|
|
||||||
|
import cn.hutool.core.img.Img;
|
||||||
|
import cn.hutool.core.io.FileUtil;
|
||||||
|
import cn.hutool.core.io.IoUtil;
|
||||||
|
import com.esotericsoftware.kryo.io.Input;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.io.*;
|
||||||
|
|
||||||
|
|
||||||
|
public class ImageTest {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test1(){
|
||||||
|
JFileChooser jfc = new JFileChooser();
|
||||||
|
jfc.setMultiSelectionEnabled(true);
|
||||||
|
jfc.setFileSelectionMode(JFileChooser.FILES_ONLY);
|
||||||
|
jfc.showOpenDialog(null);
|
||||||
|
File[] fs = jfc.getSelectedFiles();
|
||||||
|
for(File f : fs) {
|
||||||
|
File outFile = new File(f.getAbsolutePath().substring(0,f.getAbsolutePath().lastIndexOf("."))+".webp");
|
||||||
|
try(
|
||||||
|
InputStream in = formatImage(Img.from(f),800,800,null);
|
||||||
|
OutputStream out = new FileOutputStream(outFile);
|
||||||
|
){
|
||||||
|
IoUtil.copy(in,out);
|
||||||
|
}catch (Exception e){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public InputStream formatImage(Img img, int maxWidth, int maxHeight, BufferedImage watermark) {
|
||||||
|
try {
|
||||||
|
int w = img.getImg().getWidth(null);
|
||||||
|
int h = img.getImg().getHeight(null);
|
||||||
|
if(maxWidth>0 && maxHeight > 0){
|
||||||
|
if (w > maxWidth || h > maxHeight) {
|
||||||
|
int outWidth = 0;
|
||||||
|
int outHeight = 0;
|
||||||
|
outHeight = maxWidth * h / w;
|
||||||
|
if (outHeight > maxHeight) {
|
||||||
|
outHeight = maxHeight;
|
||||||
|
outWidth = outHeight * maxWidth / h;
|
||||||
|
} else {
|
||||||
|
outWidth = maxWidth;
|
||||||
|
}
|
||||||
|
img = img.scale(outWidth, outHeight);
|
||||||
|
w = outWidth;
|
||||||
|
h = outHeight;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (watermark != null) {
|
||||||
|
int ww = watermark.getWidth(null);
|
||||||
|
int wh = watermark.getHeight(null);
|
||||||
|
if (w > ww && h > wh) {
|
||||||
|
img = img.pressImage(watermark, 0, 0, 1f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ByteArrayOutputStream pout = new ByteArrayOutputStream();
|
||||||
|
|
||||||
|
img.setTargetImageType("webp").write(pout);
|
||||||
|
|
||||||
|
ByteArrayInputStream pin = new ByteArrayInputStream(pout.toByteArray());
|
||||||
|
pout.close();
|
||||||
|
pout = null;
|
||||||
|
return pin;
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException("处理图片错误", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue