File file = new File(imgUrl); // 读取文件
FileInputStream in = new FileInputStream(file);// 流读取文件
ByteArrayOutputStream baos = new ByteArrayOutputStream(); // 定义输出字节流
BufferedImage bufferedImage= ImageIO.read(inputStream); // 文件缓存读取
ImageWriter imgWriter = ImageIO.getImageWritersByFormatName("jpg").next(); //
imgWriter.reset();
ImageWriteParam imgWriteParams= new JPEGImageWriteParam(null);
imgWriteParams.setCompressionMode(imgWriteParams.MODE_EXPLICIT);
// 这里指定压缩的程度,参数qality是取值0~1范围内,
imgWriteParams.setCompressionQuality(qality);
// 要使用压缩,必须指定压缩方式为MODE_EXPLICIT
imgWriteParams.setProgressiveMode(imgWriteParams.MODE_DISABLED);
ColorModel colorModel = bufferedImage.getColorModel();// ColorModel.getRGBdefault();
imgWriteParams.setDestinationType(new ImageTypeSpecifier(colorModel, colorModel.createCompatibleSampleModel(32, 32)));
// OutputStream构造
imgWriter.setOutput(ImageIO.createImageOutputStream(baos));
imgWriter.write(null, new IIOImage(bufferedImage, null, null), imgWriteParams);
byte[] returnImage = baos.toByteArray();
FileImageOutputStream fileOutputStream = new FileImageOutputStream(new File("c:\\images\\myimage22.png"));
fileOutputStream.write(returnImage);
这篇博客介绍了如何在Java中使用javax.imageio库来压缩图片。通过FileInputStream读取图片文件,然后利用ImageIO进行缓冲处理,设置JPEG压缩质量,并将压缩后的图片保存到新的文件中。
3338

被折叠的 条评论
为什么被折叠?



