JPEGImageWriteParam 抛出 ClassCastException

JPEGImageWriteParam throws ClassCastException

我正在尝试使用以下代码

压缩 java 中的图像
ImageWriter writer = (ImageWriter)  ImageIO.getImageWritersByMIMEType("image/jpeg").next();
JPEGImageWriteParam param = (JPEGImageWriteParam) writer.getDefaultWriteParam();
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param.setCompressionType("JPEG");
param.setCompressionQuality(0.2f);
param.setProgressiveMode( ImageWriteParam.MODE_DEFAULT );       

writer.setOutput(ImageIO.createImageOutputStream(outputStream));
writer.write(null, new IIOImage(resizedImg, null, null), param);

第二行JPEGImageWriteParam param = (JPEGImageWriteParam) writer.getDefaultWriteParam();抛出ClassCastException.
如果我将其更改为 ImageWriteParam param = writer.getDefaultWriteParam(); 它为 param.setProgressiveMode( ImageWriteParam.MODE_DEFAULT );.
行抛出 UnsupportedOperationException 提前致谢...

ImageWriter#getDefaultWriteParam() 给出类型为 ImageWriteParam 而不是 JPEGImageWriteParam 的对象,这就是为什么你会得到 class 转换异常。您应该做的是创建一个新的 JPEGImageWriteParam 并使用它。

JPEGImageWriteParam param = new JPEGImageWriteParam(<pass your lacale here>);
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param.setCompressionType("JPEG");
param.setCompressionQuality(0.2f);
param.setProgressiveMode( ImageWriteParam.MODE_DEFAULT );    

希望对您有所帮助。