2015-05-28 3 views
1

Я пытаюсь сжать изображение в Java с следующим фрагментом кодаJPEGImageWriteParam бросает ClassCastException

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(); , он выдает UnsupportedOperationException для линии param.setProgressiveMode(ImageWriteParam.MODE_DEFAULT);.
Заранее спасибо ...

ответ

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);  

Надеюсь, это поможет.

+0

благодарит за немедленный ответ. Но можете ли вы уточнить, что нужно передать здесь? New JPEGImageWriteParam («?») '@Sanjeev – Muzakkir

+0

вам нужно передать объект класса java.util.Locale .. например, вы можете передать Locale.US, если вы живете в Соединенных Штатах. – Sanjeev

+0

или вы можете пройти Locale.getDefault(), который будет выбирать по умолчанию в соответствии с вашими настройками времени выполнения. – Sanjeev

Смежные вопросы