2016-08-08 21 views
0

我需要缩小图像尺寸MB到KB没有loosibng图像质量降低影像大小(MB),以KB,所以我请点击此链接decrease image resolution in java用java

但是,它之遥错误

Error: One factory fails for the operation "jpeg" 
    Occurs in: javax.media.jai.ThreadSafeOperationRegistry 
    java.lang.reflect.InvocationTargetException 
     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 javax.media.jai.FactoryCache.invoke(FactoryCache.java:130) 
     at javax.media.jai.OperationRegistry.invokeFactory(OperationRegistry.java:1682) 
     at javax.media.jai.ThreadSafeOperationRegistry.invokeFactory(ThreadSafeOperationRegistry.java:481) 
     at javax.media.jai.registry.RIFRegistry.create(RIFRegistry.java:340) 
     at com.sun.media.jai.opimage.StreamRIF.create(StreamRIF.java:110) 
     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 javax.media.jai.FactoryCache.invoke(FactoryCache.java:130) 
     at javax.media.jai.OperationRegistry.invokeFactory(OperationRegistry.java:1682) 
     at javax.media.jai.ThreadSafeOperationRegistry.invokeFactory(ThreadSafeOperationRegistry.java:481) 
     at javax.media.jai.registry.RIFRegistry.create(RIFRegistry.java:340) 
     at javax.media.jai.RenderedOp.createInstance(RenderedOp.java:830) 
     at javax.media.jai.RenderedOp.createRendering(RenderedOp.java:878) 
     at javax.media.jai.RenderedOp.getRendering(RenderedOp.java:899) 
     at ImageCompressor.compress(ImageCompressor.java:31) 
     at ImageCompressor.main(ImageCompressor.java:46) 
    Caused by: java.lang.NoClassDefFoundError: com/sun/image/codec/jpeg/ImageFormatException 
     at com.sun.media.jai.codecimpl.JPEGImageDecoder.decodeAsRenderedImage(JPEGImageDecoder.java:53) 
     at com.sun.media.jai.opimage.CodecRIFUtil.create(CodecRIFUtil.java:96) 
     at com.sun.media.jai.opimage.JPEGRIF.create(JPEGRIF.java:52) 
     ... 22 more 
    Caused by: java.lang.ClassNotFoundException: com.sun.image.codec.jpeg.ImageFormatException 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
     ... 25 more 
    Error: One factory fails for the operation "stream" 
    Occurs in: javax.media.jai.ThreadSafeOperationRegistry 
    java.lang.reflect.InvocationTargetException 
     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 javax.media.jai.FactoryCache.invoke(FactoryCache.java:130) 
     at javax.media.jai.OperationRegistry.invokeFactory(OperationRegistry.java:1682) 
     at javax.media.jai.ThreadSafeOperationRegistry.invokeFactory(ThreadSafeOperationRegistry.java:481) 
     at javax.media.jai.registry.RIFRegistry.create(RIFRegistry.java:340) 
     at javax.media.jai.RenderedOp.createInstance(RenderedOp.java:830) 
     at javax.media.jai.RenderedOp.createRendering(RenderedOp.java:878) 
     at javax.media.jai.RenderedOp.getRendering(RenderedOp.java:899) 
     at ImageCompressor.compress(ImageCompressor.java:31) 
     at ImageCompressor.main(ImageCompressor.java:46) 
    Caused by: javax.media.jai.util.ImagingException: All factories fail for the operation "jpeg" 
     at javax.media.jai.OperationRegistry.invokeFactory(OperationRegistry.java:1695) 
     at javax.media.jai.ThreadSafeOperationRegistry.invokeFactory(ThreadSafeOperationRegistry.java:481) 
     at javax.media.jai.registry.RIFRegistry.create(RIFRegistry.java:340) 
     at com.sun.media.jai.opimage.StreamRIF.create(StreamRIF.java:110) 
     ... 13 more 
    Caused by: java.lang.reflect.InvocationTargetException 
     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 javax.media.jai.FactoryCache.invoke(FactoryCache.java:130) 
     at javax.media.jai.OperationRegistry.invokeFactory(OperationRegistry.java:1682) 
     ... 16 more 
    Caused by: java.lang.NoClassDefFoundError: com/sun/image/codec/jpeg/ImageFormatException 
     at com.sun.media.jai.codecimpl.JPEGImageDecoder.decodeAsRenderedImage(JPEGImageDecoder.java:53) 
     at com.sun.media.jai.opimage.CodecRIFUtil.create(CodecRIFUtil.java:96) 
     at com.sun.media.jai.opimage.JPEGRIF.create(JPEGRIF.java:52) 
     ... 22 more 
    Caused by: java.lang.ClassNotFoundException: com.sun.image.codec.jpeg.ImageFormatException 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
     ... 25 more 
    Exception in thread "main" javax.media.jai.util.ImagingException: All factories fail for the operation "stream" 
     at javax.media.jai.OperationRegistry.invokeFactory(OperationRegistry.java:1695) 
     at javax.media.jai.ThreadSafeOperationRegistry.invokeFactory(ThreadSafeOperationRegistry.java:481) 
     at javax.media.jai.registry.RIFRegistry.create(RIFRegistry.java:340) 
     at javax.media.jai.RenderedOp.createInstance(RenderedOp.java:830) 
     at javax.media.jai.RenderedOp.createRendering(RenderedOp.java:878) 
     at javax.media.jai.RenderedOp.getRendering(RenderedOp.java:899) 
     at ImageCompressor.compress(ImageCompressor.java:31) 
     at ImageCompressor.main(ImageCompressor.java:46) 
    Caused by: java.lang.reflect.InvocationTargetException 
     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 javax.media.jai.FactoryCache.invoke(FactoryCache.java:130) 
     at javax.media.jai.OperationRegistry.invokeFactory(OperationRegistry.java:1682) 
     ... 7 more 
    Caused by: javax.media.jai.util.ImagingException: All factories fail for the operation "jpeg" 
     at javax.media.jai.OperationRegistry.invokeFactory(OperationRegistry.java:1695) 
     at javax.media.jai.ThreadSafeOperationRegistry.invokeFactory(ThreadSafeOperationRegistry.java:481) 
     at javax.media.jai.registry.RIFRegistry.create(RIFRegistry.java:340) 
     at com.sun.media.jai.opimage.StreamRIF.create(StreamRIF.java:110) 
     ... 13 more 
    Caused by: java.lang.reflect.InvocationTargetException 
     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 javax.media.jai.FactoryCache.invoke(FactoryCache.java:130) 
     at javax.media.jai.OperationRegistry.invokeFactory(OperationRegistry.java:1682) 
     ... 16 more 
    Caused by: java.lang.NoClassDefFoundError: com/sun/image/codec/jpeg/ImageFormatException 
     at com.sun.media.jai.codecimpl.JPEGImageDecoder.decodeAsRenderedImage(JPEGImageDecoder.java:53) 
     at com.sun.media.jai.opimage.CodecRIFUtil.create(CodecRIFUtil.java:96) 
     at com.sun.media.jai.opimage.JPEGRIF.create(JPEGRIF.java:52) 
     ... 22 more 
    Caused by: java.lang.ClassNotFoundException: com.sun.image.codec.jpeg.ImageFormatException 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
     ... 25 more 
    Caused by: 
    java.lang.reflect.InvocationTargetException 
     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 javax.media.jai.FactoryCache.invoke(FactoryCache.java:130) 
     at javax.media.jai.OperationRegistry.invokeFactory(OperationRegistry.java:1682) 
     at javax.media.jai.ThreadSafeOperationRegistry.invokeFactory(ThreadSafeOperationRegistry.java:481) 
     at javax.media.jai.registry.RIFRegistry.create(RIFRegistry.java:340) 
     at javax.media.jai.RenderedOp.createInstance(RenderedOp.java:830) 
     at javax.media.jai.RenderedOp.createRendering(RenderedOp.java:878) 
     at javax.media.jai.RenderedOp.getRendering(RenderedOp.java:899) 
     at ImageCompressor.compress(ImageCompressor.java:31) 
     at ImageCompressor.main(ImageCompressor.java:46) 
    Caused by: javax.media.jai.util.ImagingException: All factories fail for the operation "jpeg" 
     at javax.media.jai.OperationRegistry.invokeFactory(OperationRegistry.java:1695) 
     at javax.media.jai.ThreadSafeOperationRegistry.invokeFactory(ThreadSafeOperationRegistry.java:481) 
     at javax.media.jai.registry.RIFRegistry.create(RIFRegistry.java:340) 
     at com.sun.media.jai.opimage.StreamRIF.create(StreamRIF.java:110) 
     ... 13 more 
    Caused by: java.lang.reflect.InvocationTargetException 
     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 javax.media.jai.FactoryCache.invoke(FactoryCache.java:130) 
     at javax.media.jai.OperationRegistry.invokeFactory(OperationRegistry.java:1682) 
     ... 16 more 
    Caused by: java.lang.NoClassDefFoundError: com/sun/image/codec/jpeg/ImageFormatException 
     at com.sun.media.jai.codecimpl.JPEGImageDecoder.decodeAsRenderedImage(JPEGImageDecoder.java:53) 
     at com.sun.media.jai.opimage.CodecRIFUtil.create(CodecRIFUtil.java:96) 
     at com.sun.media.jai.opimage.JPEGRIF.create(JPEGRIF.java:52) 
     ... 22 more 
    Caused by: java.lang.ClassNotFoundException: com.sun.image.codec.jpeg.ImageFormatException 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
     ... 25 more 

我加jai_codec.jar,jai_core.jar,mlibwrapper_jai.jar。

Java版本:Java的1.8.0-的OpenJDK-1.8.0.71

操作系统:Fedora的23

建议我TOI如何解决这个问题。

+0

“没有loosibng图像质量,所以我按照这个链接降低图像分辨率在Java”这是矛盾的。如果降低分辨率,则会丢失信息,从而导致“质量”。 – Fildor

+0

@Fildor好的,建议我使用java减少图像大小(Mb到Kb),而不会降低图像质量。 –

+2

这是不可能的! – Fildor

回答

1

一般:

你怎么能指望减少大小没有松动的图像质量?较小图像的像素较少,因此无法提供较大图像的所有信息。因此,质量必须随着规模(一般)而降低。

如果你想保持尽可能多的图像质量,你也不应该选择JPG,因为JPG的想法是通过消除接缝不那么重要的信息来压缩。 PNG或甚至GIF(GIF仅适用于最多256种颜色)都是无损压缩,但在大多数情况下,不会像JPG那样缩小文件大小。

您的问题:

打开JDK似乎与JPG压缩问题。所以我的建议是切换到Oracle JDK。