Neeti Negi
Neeti Negi

Reputation: 11

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: im == null

hi i'm working on a project in which i need to make changes to BASE64 string of an image(jpg)...so at first when i didn't made any changes, the ImageReader was properly working and my image was displayed properly..but when i made changes to my BASE64 string the above exception came..i searched a lot and came to know that im==null comes when ByteStream is not jpeg,png,gif..etc..so what if i have a new type of ByteStream...what should i use?? or what ever my BASE64 string is i need to convert that to an image..so how can i do that??

here is my code snippet:this is to convert BASE64 string to an image

 public  static BufferedImage decodeToImage(String imageString) throws IOException {
    BufferedImage image = null;
    byte[] imageByte;
    try {
        BASE64Decoder decoder = new BASE64Decoder();
        imageByte = decoder.decodeBuffer(imageString);
        ByteArrayInputStream bis = new ByteArrayInputStream(imageByte);
        image = ImageIO.read(bis);
        bis.close();
    } 
    catch (Exception e) {
        e.printStackTrace();
    }

    ImageIO.write(image, "jpg", new File("d:/CopyOfTestImage.jpg"));

    return image;
   }

Upvotes: 1

Views: 9192

Answers (2)

Make it Simple
Make it Simple

Reputation: 1882

change this line:

ImageIO.write(image, "jpg", new File("d:/CopyOfTestImage.jpg"));

to something like this

image = ImageIO.read(getClass().getResource("/resources/CopyOfTestImage.jpg"));

Upvotes: 0

Andrzej Doyle
Andrzej Doyle

Reputation: 103837

Have a look at the Javadocs for ImageIO.read:

Returns a BufferedImage as the result of decoding a supplied InputStream with an ImageReader chosen automatically from among those currently registered. The InputStream is wrapped in an ImageInputStream. If no registered ImageReader claims to be able to read the resulting stream, null is returned. [emphasis mine]

The read method can return null, yet you are not checking for this. In fact the method is probably returning null, which is why ImageIO.write throws an exception when you pass null into it.

First things first, you need to check for error conditions and handle them appropriately (including the null return, but also including any exceptions that are thrown, which you currently catch and ignore).

Now if you're getting null back from ImageIO.read, it means the bytes you passed into the read method did not appear to be a valid image in any known format. You need to look in more detail at the modifications you're making to the base64 string, and ensure that what you're doing is valid, and results in a valid image. Alternatively, if you're getting some other exception thrown, then you need to handle that appropriately.

(As a general rule, don't throw away/skip over errors, because then when things go wrong you have no idea why!)

Upvotes: 2

Related Questions