package com.ibeetl.manage.core.util;
import org.apache.commons.lang3.StringUtils;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
/**
* @author wenjq
* @data 2018/10/15 13:52
*/
public class MinImageUtil {
/**
* 压缩图片大小 调用这个方法即可
* @param file
* @return
*/
public static Boolean getMinImage(File file){
// StringBuilder sb = new StringBuilder(file.getName());
// StringBuilder sb1 = new StringBuilder(file.getPath());
// String s = new StringBuilder(file.getName()).substring(0,file.getName().indexOf("."));
// String path = new StringBuilder(file.getPath()).substring(0,file.getPath().indexOf(new StringBuilder(file.getName()).substring(0,file.getName().indexOf("."))));
try {
zoomImageScale(file,new StringBuilder(file.getPath()).substring(0,file.getPath().indexOf(new StringBuilder(file.getName()).substring(0,file.getName().indexOf("."))))+file.getName(),1000);
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
/**
* 压缩图片成缩略图
* @param file
* @return
*/
public static Boolean getMinMinImage(File file){
// StringBuilder sb = new StringBuilder(file.getName());
// StringBuilder sb1 = new StringBuilder(file.getPath());
// String s = new StringBuilder(file.getName()).substring(0,file.getName().indexOf("."));
// String path = new StringBuilder(file.getPath()).substring(0,file.getPath().indexOf(new StringBuilder(file.getName()).substring(0,file.getName().indexOf("."))));
try {
zoomImageScale(file,new StringBuilder(file.getPath()).substring(0,file.getPath().indexOf(new StringBuilder(file.getName()).substring(0,file.getName().indexOf("."))))+"theThumbnail"+file.getName(),250);
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
/**
* 按指定高度 等比例缩放图片
*
* @param imageFile
* @param newPath
* @param newWidth 新图的宽度
* @throws IOException
*/
public static void zoomImageScale(File imageFile, String newPath, int newWidth) throws IOException {
if(!imageFile.canRead())
return;
BufferedImage bufferedImage = ImageIO.read(imageFile);
if (null == bufferedImage)
return;
int originalWidth = bufferedImage.getWidth();
int originalHeight = bufferedImage.getHeight();
double scale = (double)originalWidth / (double)newWidth; // 缩放的比例
int newHeight = (int)(originalHeight / scale);
zoomImageUtils(imageFile, newPath, bufferedImage, newWidth, newHeight);
}
private static void zoomImageUtils(File imageFile, String newPath, BufferedImage bufferedImage, int width, int height)
throws IOException{
String suffix = StringUtils.substringAfterLast(imageFile.getName(), ".");
// 处理 png 背景变黑的问题
if(suffix != null && (suffix.trim().toLowerCase().endsWith("png") || suffix.trim().toLowerCase().endsWith("gif"))){
BufferedImage to= new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = to.createGraphics();
to = g2d.getDeviceConfiguration().createCompatibleImage(width, height, Transparency.TRANSLUCENT);
g2d.dispose();
g2d = to.createGraphics();
Image from = bufferedImage.getScaledInstance(width, height, Image.SCALE_AREA_AVERAGING);
g2d.drawImage(from, 0, 0, null);
g2d.dispose();
ImageIO.write(to, suffix, new File(newPath));
}else{
// 高质量压缩,其实对清晰度而言没有太多的帮助
// BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
// tag.getGraphics().drawImage(bufferedImage, 0, 0, width, height, null);
//
// FileOutputStream out = new FileOutputStream(newPath); // 将图片写入 newPath
// JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
// JPEGEncodeParam jep = JPEGCodec.getDefaultJPEGEncodeParam(tag);
// jep.setQuality(1f, true); //压缩质量, 1 是最高值
// encoder.encode(tag, jep);
// out.close();
BufferedImage newImage = new BufferedImage(width, height, bufferedImage.getType());
Graphics g = newImage.getGraphics();
g.drawImage(bufferedImage, 0, 0, width, height, null);
g.dispose();
ImageIO.write(newImage, suffix, new File(newPath));
}
}
}
|