0

I need to reduce image size MB to KB without loosibng image Quality, so I follow this link decrease image resolution in java

But, it s throw Error

    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

I added jai_codec.jar, jai_core.jar, mlibwrapper_jai.jar.

java version : java-1.8.0-openjdk-1.8.0.71

os: fedora 23.

Suggest me How toi solve this Problem.

Community
  • 1
  • 1
Rajkumar .E
  • 1,440
  • 3
  • 20
  • 34
  • "without loosibng image Quality, so I follow this link decrease image resolution in java" That is contradictory. If you decrease resolution, you lose information and thus "Quality". – Fildor Aug 08 '16 at 07:23
  • @Fildor OK, Suggest me any better way to reduce image size (Mb to Kb), without reduce image quality using java. – Rajkumar .E Aug 08 '16 at 07:40
  • 2
    That is impossible! – Fildor Aug 08 '16 at 08:02
  • Depending on your application you could create preview-images with low resolution that fit in a few Kb and load the full resolution image only on demand. – MrSmith42 Aug 08 '16 at 12:34

1 Answers1

1

General:

How do you expect to reduce size without loosing image quality? Smaller Images have less pixels so they cannot provide all the information of the bigger image. Therefore the quality has to decrease with size (in general).

If you want to keep as much image quality as possible you should also not choose JPG because the idea of JPG is to compress by loosing information that seam to be not so important. PNG or even GIF( GIF is only for at most 256 colors) are loss free compression, but will in most cases not shrink your file size as much as JPG.

To your problem:

Open JDK seems to have problems with JPG compression. So my recommendation is to switch to the oracle JDK.

MrSmith42
  • 9,961
  • 6
  • 38
  • 49