java imageio压缩图片_在Java中使用ImageIO设置jpg压缩级别

您必须使用

JPEGImageWriteParam,然后使用

ImageWriter.write()保存图像。在写入之前,通过

ImageWriter.setOutput设置输出。

设置压缩级别如下:

JPEGImageWriteParam jpegParams = new JPEGImageWriteParam(null);

jpegParams.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);

jpegParams.setCompressionQuality(1f);

其中1f是代表100%质量的浮点数。如果我不记得错误,默认值是70%左右。

编辑

然后,您必须按照以下步骤获取ImageWriter的实例。有两种方式,一种是短暂的(我保持两者,以防万一)。

简短的方法(lapo在一个评论中提出)是:

final ImageWriter writer = ImageIO.getImageWritersByFormatName("jpg").next();

// specifies where the jpg image has to be written

writer.setOutput(new FileImageOutputStream(

new File(folder.toString() + "/" + filename + ".jpg")));

// writes the file with given compression level

// from your JPEGImageWriteParam instance

writer.write(null, new IIOImage(capture, null, null), jpegParams);

或更长的路

// use IIORegistry to get the available services

IIORegistry registry = IIORegistry.getDefaultInstance();

// return an iterator for the available ImageWriterSpi for jpeg images

Iterator services = registry.getServiceProviders(ImageWriterSpi.class,

new ServiceRegistry.Filter() {

@Override

public boolean filter(Object provider) {

if (!(provider instanceof ImageWriterSpi)) return false;

ImageWriterSpi writerSPI = (ImageWriterSpi) provider;

String[] formatNames = writerSPI.getFormatNames();

for (int i = 0; i < formatNames.length; i++) {

if (formatNames[i].equalsIgnoreCase("JPEG")) {

return true;

}

}

return false;

}

},

true);

//...assuming that servies.hasNext() == true, I get the first available service.

ImageWriterSpi writerSpi = services.next();

ImageWriter writer = writerSpi.createWriterInstance();

// specifies where the jpg image has to be written

writer.setOutput(new FileImageOutputStream(

new File(folder.toString() + "/" + filename + ".jpg")));

// writes the file with given compression level

// from your JPEGImageWriteParam instance

writer.write(null, new IIOImage(capture, null, null), jpegParams);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值