java 将图片进项压缩并进行Base64编码 逻辑描述:

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 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值