工具类|Java实现图片等比例压缩,支持png&jpg格式

做图片上传项目,特别是基于互联网项目的,往往要考虑到图片到图片不能太大,太大可能影响加载速度和用户体验,如果在前端做大小限制,让用户去处理图片大小,有点太不人性化了。程序能解决的事情,就不让发生在用户端。

代码比较简单,直接上代码:

package com.fengchen.image;

import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;

import javax.imageio.ImageIO;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class ImageHelper {
     

	/**
	 * 创建图片缩略图,进行等比例压缩
	 * 
	 * @param src    源图片文件完整路径
	 * @param dist   目标图片文件完整路径
	 * @param width  缩放的宽度
	 * @param height 缩放的高度
	 */
	public static void compress(String src, String dist, float width, float height) {
     
		try {
     
			File srcfile = new File(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 = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB);
			bfImage.getGraphics().drawImage(image.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH), 0, 0,
					null);

			FileOutputStream os = new FileOutputStream(dist);
			JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(os);
			encoder.encode(bfImage);
			os.close();
			System.out.println("创建缩略图成功");
		} catch (Exception e) {
     
			System.out.println("创建缩略图发生异常" + e.getMessage());
		}
	}

}

推荐下大飞做的一个Java技术类公众号“Java实战宝典”,主要是收集一些日常工作中常用的工具类,一些实战项目的教学及一些疑难问题整理。
工具类|Java实现图片等比例压缩,支持png&jpg格式_第1张图片

你可能感兴趣的:(工具类,java)