javaimage-processingawtimage-editor

Java JPG To Png


I am using a common format all over application for images as png.Any jpg image uploaded still gets saved as png using code as below.

java.awt.image.BufferedImage bufferedImage = ImageIO.read(jpgImagePAth);

 if(!IsExtensionPng(jpgImagePath)){
        ImageIO.write(bufferedImage, "png", new File(pptFolder, justNamePng));
  }

But this preserves alpha even though it was not there in the jpg so makes a 2MB Image 7MB and 6MB to 16MB . Is there anyway to save png without maintaining the alpha ?

The reason I need to conver to PNG is that later on when I add text on image it looses the actual resolution. I already tried loseless JPEG which didnt fix it.


Solution

  • It's not the alpha channel that is causing the file size to grow, it's the file type. JPG uses lossy compression; PNG is lossless compression. In other words, JPG is throwing out some data to reduce the size of the file. That's why you get to choose a "quality" level when saving to JPG - that determines how much is thrown out.

    How do you know you're getting the alpha channel anyway? If you still want PNG and want to be sure you're dropping the alpha channel, set the image type to BufferedImage.TYPE_RGB, e.g.

    BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_RGB);
    

    You'll have to get the graphics object associated with your new BufferedImage and copy the jpg onto it, then write it out. This question isn't quite the same as yours but has sample code you may find useful.

    Paul