天天看点

java 图片无损压缩_java 实现图片按照执行比例的无损压缩

packagecom.hengyunsoft.face.util;importjava.awt.Image;importjava.awt.image.BufferedImage;importjava.io.File;importjava.io.FileOutputStream;importjavax.imageio.ImageIO;importcom.sun.image.codec.jpeg.JPEGCodec;importcom.sun.image.codec.jpeg.JPEGImageEncoder;public classImageCompressUtil {

public static void createThumbnail(String src, String dist, floatwidth,floatheight) {try{

File srcfile= newFile(src);if (!srcfile.exists()) {

System.out.println("文件不存在");return;

}

BufferedImage image=ImageIO.read(srcfile);//获得缩放的比例

double ratio = 1.0;//判断如果高、宽都不大于设定值,则不处理

if (image.getHeight() > height || image.getWidth() >width) {if (image.getHeight() >image.getWidth()) {

ratio= height /image.getHeight();

}else{

ratio= width /image.getWidth();

}

}//计算新的图面宽度和高度

int newWidth = (int) (image.getWidth() *ratio);int newHeight = (int) (image.getHeight() *ratio);

BufferedImage bfImage= newBufferedImage(newWidth, newHeight,

BufferedImage.TYPE_INT_RGB);

bfImage.getGraphics().drawImage(

image.getScaledInstance(newWidth, newHeight,

Image.SCALE_SMOOTH),0, 0, null);

FileOutputStream os= newFileOutputStream(dist);

JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(os);

encoder.encode(bfImage);

os.close();

System.out.println("创建缩略图成功");

}catch(Exception e) {

System.out.println("创建缩略图发生异常" +e.getMessage());

}

}public static voidmain(String[] args) {

String basePath= "F:\\workspace\\.metadata\\.plugins\\org.eclipse.wst.server.core\\tmp0\\wtpwebapps\\AipFaceSys\\upload\\20180205\\";

createThumbnail(basePath+"20180205163552.png", basePath+"a.png", 256, 192);

createThumbnail(basePath+"20180205163552.png", basePath+"b.png", 640, 480);

createThumbnail(basePath+"20180205163552.png", basePath+"c.png", 960, 720);

}

}