Java实现图片压缩的两种方式
Java实现图片压缩的两种方式一、java自带的Graphics二、Google的一个开源框架thumbnailator
文章共2,900字 · 阅读需要大约10分钟
一键AI生成摘要,助你高效阅读
问答
·
java自带的Graphics
不需要额外引入Java包,速度略慢
测试代码
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.UUID;
public class ImageCompressUtil {
private static String path = "D:\\picture\\";
public static void main(String[] args) throws IOException {
File imageFile = new File(path + "1234.jpg");
BufferedImage inputImage = ImageIO.read(imageFile);
//通过比例压缩
float scale = 0.5f;
BufferedImage outputImage = compress(inputImage, scale);
//图片输出路径,以及图片名
File outputFile = new File(path + UUID.randomUUID() + "." + getImageType(inputImage.getType()));
ImageIO.write(outputImage, getImageType(inputImage.getType()), outputFile);
// 图片持久化 方法二
// FileOutputStream fileOutputStream = new FileOutputStream(path + UUID.randomUUID() + "." + getImageType(bufferedImage.getType()));
// JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fileOutputStream);
// encoder.encode(finalImage);
// fileOutputStream.close();
}
/**
* 压缩图片
*/
public static BufferedImage compress(BufferedImage inputImage, float scale) {
//压缩之后的长度和宽度
int outputHeight = (int)(inputImage.getHeight()*scale);
int outputWidth = (int)(inputImage.getWidth()*scale);
BufferedImage outputImage = new BufferedImage(outputWidth, outputHeight, inputImage.getType());
outputImage.getGraphics().drawImage(
inputImage.getScaledInstance(outputWidth, outputHeight, Image.SCALE_SMOOTH), 0, 0, null);
return outputImage;
}
public static String getImageType(int imageType){
switch (imageType){
// case 5:
// return "jpg";
case 6:
return "png";
case 13:
return "gif";
default:
return "jpg";
}
}
}
Google的一个开源框架thumbnailator
引入maven依赖
<!-- 压缩图片-->
<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
<version>0.4.8</version>
</dependency>
测试代码
import net.coobird.thumbnailator.Thumbnails;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.UUID;
public class ImageThumbnailsUtil {
private static String path = "D:\\picture\\";
public static void main(String[] args) throws Exception {
long start = System.currentTimeMillis();
File imageFile = new File(path + "1234.jpg");
InputStream is = new FileInputStream(imageFile);
BufferedImage bufferedImage = resizeImageSize(is, 1000);
File outputFile = new File(path + UUID.randomUUID() + "." + getImageType(bufferedImage.getType()));
ImageIO.write(bufferedImage, getImageType(bufferedImage.getType()), outputFile);
System.out.print("用时:");
System.out.println(System.currentTimeMillis()-start);
}
/**
* 调整图片大小
* @param inputStream 图片流
* @param size
*/
public static BufferedImage resizeImageSize(InputStream inputStream,int size) {
ByteArrayOutputStream os = null;
ByteArrayInputStream is = null;
try{
int length = size * 1200;// size*1024*3/4 向下取近似值
int fileSize = inputStream.available();
BufferedImage src = ImageIO.read(inputStream);
for (int i = 0; i < 10 && fileSize > length; i++) {
BufferedImage outImage = Thumbnails.of(src).outputQuality(0.5f).size(src.getWidth() / 2, src.getHeight() / 2).asBufferedImage();
os = imageOutput(outImage);
is = new ByteArrayInputStream(os.toByteArray());
fileSize = is.available();
src = ImageIO.read(is);
is.close();
os.close();
}
return src;
} catch (Exception e) {
e.printStackTrace();
try {
if (is != null) { is.close(); }
if (os != null) { os.close(); }
if (inputStream != null) { inputStream.close(); }
} catch (IOException ioException) {
ioException.printStackTrace();
}
}
return null;
}
// BufferedImage 输出 OutputStream
public static ByteArrayOutputStream imageOutput(BufferedImage bufferedImage) throws IOException {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ImageIO.write(bufferedImage, getImageType(bufferedImage.getType()), outputStream);
return outputStream;
}
public static String getImageType(int imageType){
switch (imageType){
// case 5:
// return "jpg";
case 6:
return "png";
case 13:
return "gif";
default:
return "jpg";
}
}
}
更多推荐
已为社区贡献2条内容
所有评论(0)