【问题标题】:JPEGImageWriteParam throws ClassCastExceptionJPEGImageWriteParam 抛出 ClassCastException
【发布时间】:2015-08-10 20:25:17
【问题描述】:

我正在尝试使用以下代码在 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
提前谢谢...

【问题讨论】:

    标签: java image awt jpeg javax.imageio


    【解决方案1】:

    ImageWriter#getDefaultWriteParam() 给出了一个 ImageWriteParam 类型的对象,而不是 JPEGImageWriteParam 这就是你得到类转换异常的原因。你应该做的是创建一个新的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 );    
    

    希望这会有所帮助。

    【讨论】:

    • 感谢您的即时回复。但是您能否更具体地说明需要在这里传递的内容new JPEGImageWriteParam("?")@Sanjeev
    • 你必须传递类 java.util.Locale 的对象 .. 例如,如果你住在美国,你可以传递 Locale.US。
    • 或者你可以传递 Locale.getDefault () 它将根据你的运行时设置选择默认值
    • 我知道它有点晚了,但它帮助了我感谢@Sanjeev....但是我通过了 null .... :)
    • 很高兴帮助你..玩得开心编码:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-02
    • 2013-04-13
    • 2017-10-10
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多