Java:压缩JPEG图像

Java:压缩JPEG图像,java,image-processing,javax.imageio,Java,Image Processing,Javax.imageio,我试着用我从中得到的代码压缩JPEG 这是我实施的 public File compressJPEGImage(String filePath, float ratio) { Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName("jpeg"); ImageWriter jpegWriter = writers.next(); // Set the compressio

我试着用我从中得到的代码压缩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;
}
public File compressJPEGImage(字符串文件路径,浮点比率){
迭代器编写器=ImageIO.getImageWritersByFormatName(“jpeg”);
ImageWriter jpegWriter=writers.next();
//将压缩质量设置为浮点值,如0.8
ImageWriteParam参数=jpegWriter.getDefaultWriteParam();
参数setCompressionMode(ImageWriteParam.MODE_显式);
参数设置压缩质量(比率);
//将图像写入文件
File filepath=新文件(filepath+“/”+imageModel.getId()+“.jpeg”);
FileImageOutputStream out=null;
试一试{
out=新的FileImageOutputStream(文件路径);
jpegWriter.setOutput(输出);
jpegWriter.write(空,新IIOImage(图像,空,空),参数);
jpegWriter.dispose();
out.close();
}捕获(IOE异常){
log.error(“压缩JPEG图像时出错”+e.getMessage());
}
返回文件路径;
}
当我编写一个测试用例来验证它时。我遇到了以下异常,任何人都可以修复此错误吗

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)
java.lang.unsatifiedlinkerror:com.sun.imageio.plugins.jpeg.JPEGImageWriter.initWriterIDs(Ljava/lang/Class;Ljava/lang/Class;)V
在com.sun.imageio.plugins.jpeg.JPEGImageWriter.initWriterIDs(本机方法)
在com.sun.imageio.plugins.jpeg.JPEGImageWriter.(JPEGImageWriter.java:186)
在com.sun.imageio.plugins.jpeg.JPEGImageWriterSpi.createWriterInstance(JPEGImageWriterSpi.java:96)上
位于javax.imageio.spi.ImageWriterSpi.createWriterInstance(ImageWriterSpi.java:351)
在javax.imageio.imageio$imageWritererator.next(imageio.java:843)
在javax.imageio.imageio$imageWritererator.next(imageio.java:827)
位于com.quixey.media.service.converter.ImageConversion.compressJPEGImage(ImageConversion.java:111)
在com.quixey.media.service.converter.ImageConversionTest.test\u CompressImage(ImageConversionTest.java:68)上
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:497)
位于org.junit.runners.model.FrameworkMethod$1.runReflectVeCall(FrameworkMethod.java:47)
位于org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
位于org.junit.runners.model.FrameworkMethod.invokeeexplosive(FrameworkMethod.java:44)
位于org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
位于org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
位于org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
位于org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
位于org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
如果你在谷歌上搜索

 java.lang.UnsatisfiedLinkError: com.sun.imageio.plugins.jpeg.JPEGImageWriter.initWriterID` 
您将发现这是中的一个已知错误


作为一种解决方法,您可以使用JDK 7,或者尝试切换到更高版本的JDK 8

你使用什么JDK?openjdk版本“1.8.0_40-internal”我将我的java版本从openjdk版本“1.8.0_40-internal”更改为java版本“1.8.0_45”,但仍然显示相同的错误。你尝试过1.7版本吗?只是为了证明它曾经工作过。