核心思想:
使用Thumbnailator实现图片的压缩功能,Thumbnailator也提供给图片缩放、旋转与加水印等功能。项目中前端上传数据是base64格式传入,也就使用了base64压缩
使用方式
引入依赖
<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
<version>0.4.8</version>
</dependency>
调用工具类
import net.coobird.thumbnailator.Thumbnails;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang.StringUtils;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.net.HttpURLConnection;
import java.net.URL;
public class Base64CompressUtils {
/**
* 在线图片转换成base64字符串
*
* @param imgURL 图片线上路径
* @return
*/
public static String ImageToBase64ByOnline(String imgURL) {
ByteArrayOutputStream data = new ByteArrayOutputStream();
try {
// 创建URL
URL url = new URL(imgURL);
byte[] by = new byte[1024];
// 创建链接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);
InputStream is = conn.getInputStream();
// 将内容读取内存中
int len = -1;
while ((len = is.read(by)) != -1) {
data.write(by, 0, len);
}
// 关闭流
is.close();
} catch (IOException e) {
e.printStackTrace();
}
// 对字节数组Base64编码
BASE64Encoder encoder = new BASE64Encoder();
String str=encoder.encode(data.toByteArray());
//压缩Base64编码并输出
return resizeImageTo50K(str);
}
/**
* 压缩base64编码至50K以内
* @param base64Img
* @return
*/
public static String resizeImageTo50K(String base64Img) {
return resizeImage(base64Img, 50);
}
/**
* 压缩base64编码至目标大小以内,单位/kb
* @param base64Img 目标base64
* @param targetSize 目标大小,单位kb
* @return
*/
public static String resizeImage(String base64Img, int targetSize) {
try{
return compressPicCycle(base64Img, targetSize, 0.8);
} catch (Exception e) {
e.printStackTrace();
return base64Img;
}
}
/**
*
* @param base64 目标base64
* @param targetSize 目标大小,单位kb
* @param accuracy 精度,递归压缩的比率,建议小于0.9
* @return
* @throws IOException
*/
private static String compressPicCycle(String base64, long targetSize, double accuracy) throws IOException {
BASE64Decoder decoder = new BASE64Decoder();
byte[] bytes1 = decoder.decodeBuffer(base64);
InputStream stream = new ByteArrayInputStream(bytes1);
BufferedImage bim = ImageIO.read(stream);
//判断大小,如果小于50kb,不用压缩,如果大于等于50kb,需要压缩
if (bytes1.length <= targetSize * 1024) {
return base64;
}
//计算宽高
int srcWidth = bim.getWidth();
int srcHeight = bim.getHeight();
int destWidth = new BigDecimal(srcWidth).multiply(new BigDecimal(accuracy)).intValue();
int destHeight = new BigDecimal(srcHeight).multiply(new BigDecimal(accuracy)).intValue();
BufferedImage output = Thumbnails.of(bim)
.size(destWidth,destHeight)
.outputQuality(accuracy).asBufferedImage();
String base64Out = imageToBase64(output);
return compressPicCycle(base64Out,targetSize,accuracy);
}
/**
* BufferedImage转换成base64,默认是png类型的图片
* @param bufferedImage 目标图片
* @return
*/
public static String imageToBase64(BufferedImage bufferedImage) {
Base64 encoder = new Base64();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
ImageIO.write(bufferedImage, "png", baos);
} catch (IOException e) {
}
return new String(encoder.encode((baos.toByteArray())));
}
/**
* BufferedImage转换成base64
* @param bufferedImage 目标图片
* @param imageType 图片类型
* @return
*/
public static String imageToBase64(BufferedImage bufferedImage, String imageType) {
Base64 encoder = new Base64();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
ImageIO.write(bufferedImage, imageType, baos);
} catch (IOException e) {
}
return new String(encoder.encode((baos.toByteArray())));
}
/**
* 本地图片转换成base64字符串
*
* @param imgFile 图片本地路径
* @return
*/
public static String ImageToBase64ByLocal(String imgFile) {// 将图片文件转化为字节数组字符串,并对其进行Base64编码处理
InputStream in = null;
byte[] data = null;
// 读取图片字节数组
try {
in = new FileInputStream(imgFile);
data = new byte[in.available()];
in.read(data);
in.close();
} catch (IOException e) {
e.printStackTrace();
}
// 对字节数组Base64编码
BASE64Encoder encoder = new BASE64Encoder();
return encoder.encode(data);// 返回Base64编码过的字节数组字符串
}
/**
* base64字符串转换成图片
*
* @param imgStr base64字符串
* @param imgFilePath 图片存放路径
* @return
*/
public static boolean Base64ToImage(String imgStr, String imgFilePath) { // 对字节数组字符串进行Base64解码并生成图片
if (StringUtils.isEmpty(imgStr)) // 图像数据为空
return false;
BASE64Decoder decoder = new BASE64Decoder();
try {
// Base64解码
byte[] b = decoder.decodeBuffer(imgStr);
for (int i = 0; i < b.length; ++i) {
if (b[i] < 0) {// 调整异常数据
b[i] += 256;
}
}
OutputStream out = new FileOutputStream(imgFilePath);
out.write(b);
out.flush();
out.close();
return true;
} catch (Exception e) {
return false;
}
}
}
调用示例
public static void main(String[] args) {
String bareheadedBase64 = "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";
bareheadedBase64 = Base64CompressUtils.resizeImage(bareheadedBase64, 20);
System.out.println(bareheadedBase64);
}
注意
- 本文只是提供一个简单压缩图片的工具类
- 使用过程中需要注意图片类型,示例中提供的图片类型为PNG,其他类型的需要在imageToBase64这个方法上做入参调整
评论区