Created
August 11, 2017 07:10
-
-
Save aliang228/52316daf2d5f4a4b7d6374797ec663d4 to your computer and use it in GitHub Desktop.
java图片压缩到200K以内
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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