Skip to content

Instantly share code, notes, and snippets.

@aliang228
Created August 11, 2017 07:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aliang228/52316daf2d5f4a4b7d6374797ec663d4 to your computer and use it in GitHub Desktop.
Save aliang228/52316daf2d5f4a4b7d6374797ec663d4 to your computer and use it in GitHub Desktop.
java图片压缩到200K以内
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Date;
import java.util.Iterator;
import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
import javax.imageio.ImageWriteParam;
import javax.imageio.ImageWriter;
import javax.imageio.stream.ImageOutputStream;
import javax.imageio.stream.MemoryCacheImageOutputStream;
import org.apache.commons.io.FileUtils;
/**
* @author Jeff.Chen
*
*/
public class ImageCompresser {
public static void main(String[] args) throws IOException {
File input = new File("C:\\Users\\lenovo\\Pictures\\100708090966041.jpg");
long size = FileUtils.sizeOf(input);
float compressRate = 200000.0f / size;
// float compressRate = 0.5f;
if (compressRate < 1.0) {
System.out.println("文件大小:" + FileUtils.byteCountToDisplaySize(size));
Date now = new Date();
File compressedImageFile = new File("C:\\Users\\lenovo\\Pictures\\compress_"+ now.getSeconds() +".jpg");
OutputStream os =new FileOutputStream(compressedImageFile);
BufferedImage image = ImageIO.read(input);
writeJPG(image, os, compressRate);
long sz = FileUtils.sizeOf(compressedImageFile);
System.out.println("文件大小:" + FileUtils.byteCountToDisplaySize(sz));
}else {
System.out.println("文件大小:" + FileUtils.byteCountToDisplaySize(size) + ", 无须压缩。");
}
}
public static void writeJPG(
BufferedImage bufferedImage,
OutputStream outputStream,
float quality) throws IOException
{
Iterator<ImageWriter> iterator =
ImageIO.getImageWritersByFormatName("jpg");
ImageWriter imageWriter = iterator.next();
ImageWriteParam imageWriteParam = imageWriter.getDefaultWriteParam();
imageWriteParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
imageWriteParam.setCompressionQuality(quality);
ImageOutputStream imageOutputStream =
new MemoryCacheImageOutputStream(outputStream);
imageWriter.setOutput(imageOutputStream);
IIOImage iioimage = new IIOImage(bufferedImage, null, null);
imageWriter.write(null, iioimage, imageWriteParam);
imageOutputStream.flush();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment