2015-08-10 2 views
1

Я пытался сжать JPEG с кодом я получил от codegeeksJava: Сжатие изображения JPEG

Вот что я реализовал,

public File compressJPEGImage(String filePath, float ratio) { 

    Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName("jpeg"); 
    ImageWriter jpegWriter = writers.next(); 

    // Set the compression quality to float value like 0.8 
    ImageWriteParam param = jpegWriter.getDefaultWriteParam(); 
    param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); 
    param.setCompressionQuality(ratio); 

    // Write the image to a file 
    File filepath = new File(filePath + "/" + imageModel.getId() + ".jpeg"); 
    FileImageOutputStream out = null; 
    try { 
     out = new FileImageOutputStream(filepath); 
     jpegWriter.setOutput(out); 
     jpegWriter.write(null, new IIOImage(image, null, null), param); 
     jpegWriter.dispose(); 
     out.close(); 
    } catch (IOException e) { 
     log.error("Error Compressingthe JPEG image" + e.getMessage()); 
    } 
    return filepath; 
} 

, когда я написал тест, чтобы проверить его. Я получил следующее исключение, может кто-нибудь, исправить эту ошибку

java.lang.UnsatisfiedLinkError: com.sun.imageio.plugins.jpeg.JPEGImageWriter.initWriterIDs(Ljava/lang/Class;Ljava/lang/Class;)V 
at com.sun.imageio.plugins.jpeg.JPEGImageWriter.initWriterIDs(Native Method) 
at com.sun.imageio.plugins.jpeg.JPEGImageWriter.<clinit>(JPEGImageWriter.java:186) 
at com.sun.imageio.plugins.jpeg.JPEGImageWriterSpi.createWriterInstance(JPEGImageWriterSpi.java:96) 
at javax.imageio.spi.ImageWriterSpi.createWriterInstance(ImageWriterSpi.java:351) 
at javax.imageio.ImageIO$ImageWriterIterator.next(ImageIO.java:843) 
at javax.imageio.ImageIO$ImageWriterIterator.next(ImageIO.java:827) 
at com.quixey.media.service.converter.ImageConversion.compressJPEGImage(ImageConversion.java:111) 
at com.quixey.media.service.converter.ImageConversionTest.test_CompressImage(ImageConversionTest.java:68) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:497) 
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) 
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) 
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) 
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) 
+1

какой JDK вы используете? – wero

+0

openjdk version "1.8.0_40-internal" – uttam

ответ

3

Если вы Google для

java.lang.UnsatisfiedLinkError: com.sun.imageio.plugins.jpeg.JPEGImageWriter.initWriterID` 

вы обнаружите, что это известная ошибка в Open JDK 8 versions.

В качестве обходного пути вы можете использовать JDK 7 или попытаться перейти на более позднюю версию JDK 8.

+0

Я изменил версию Java на версию openjdk "1.8.0_40-internal" на версию java версии 1.8.0_45, но она по-прежнему показывает ту же ошибку. – uttam

+0

Вы попробовали версию 1.7 - только для доказательства того, что она когда-то работала. – wero

+0

Это сработало, спасибо ... – uttam