public class test
{
/**
*
* getImgCompressBase64CodeString 功能描述:将图片进项压缩并进行Base64编码 逻辑描述:
*
* @author GuanXiaoBo
* @param fileByte 源图片二进制数组
* @param filePath 源图片的父目录,用于创建临时文件使用
* @param quality 压缩图片质量参数,介于0与1之间
* @param width 压缩图片的宽度
* @param height 压缩图片的高度
* @return String 图片Base64编码
* @since Ver 1.00
*/
public static String getImgCompressBase64CodeString(byte[] fileByte, String filePath, float quality, int width,
int height)
{
// 定义base64编码
String base64Code = “”;
// 获取源图片文件
ImageIcon imIcon = new ImageIcon(fileByte);
Image image = imIcon.getImage();
// 压缩图片
Image resizedImage = null;
// 根据目标的宽度与高度进行比例压缩计算目标图片
resizedImage = image.getScaledInstance(width, height, Image.SCALE_SMOOTH);
// 处理图片
Image tmpImage = new ImageIcon(resizedImage).getImage();
// 创建 buffered image
BufferedImage bufferedImage = new BufferedImage(tmpImage.getWidth(null), tmpImage.getHeight(null),
BufferedImage.TYPE_INT_RGB);
// 创建图片绘制画笔
Graphics graphics = bufferedImage.createGraphics();
// 处理背景并绘制图片
graphics.setColor(Color.white);
graphics.fillRect(0, 0, tmpImage.getWidth(null), tmpImage.getHeight(null));
graphics.drawImage(tmpImage, 0, 0, null);
graphics.dispose();
// 构建数组矩阵
float softenFactor = 0.05f;
float[] softenArray =
{ 0, softenFactor, 0, softenFactor, 1 - (softenFactor * 4), softenFactor, 0, softenFactor, 0 };
// 构建矩阵
Kernel kernel = new Kernel(3, 3, softenArray);
ConvolveOp cOp = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null);
bufferedImage = cOp.filter(bufferedImage, null);
// 构建File对象,用于临时存储缩略图,之后进行删除
File tmpFile = new File(filePath + "tmpImgCompress_" + System.currentTimeMillis() + ".jpg");
try
{
FileOutputStream tmpOutputStream = new FileOutputStream(tmpFile);
// 进行JPEG编码以及进行质量压缩
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(tmpOutputStream);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bufferedImage);
// 质量压缩
param.setQuality(quality, true);
encoder.setJPEGEncodeParam(param);
encoder.encode(bufferedImage);
// 获取缩放图片的Base64编码
if (tmpFile.exists())
{
base64Code = CommonUtil.imgBase64Code(tmpFile.getCanonicalPath());
}
// 关闭输出流
if (tmpOutputStream != null)
{
tmpOutputStream.close();
}
} catch (FileNotFoundException e)
{
logger.error("进行图片缩略临时存储路径错误" + e.getMessage());
} catch (ImageFormatException e)
{
logger.error("进行图片缩略编码异常" + e.getMessage());
} catch (IOException e)
{
logger.error("进行图片缩略时错误异常" + e.getMessage());
} finally
{
// 进行临时文件删除
boolean deleFlag = tmpFile.delete();
if (!deleFlag)
{
logger.error("进行临时图片删除失败!");
}
}
return base64Code;
}
}
原文:https://blog.csdn.net/jing165121/article/details/43057881