Search code examples
javajai

JAI Change JPEG Resolution


I am having difficulty using the Java JAI (Java Advance Imaging) API to change the resolution of a JPEG image from lets say 1024x800 to 512x400.

I have played around with the API and keep getting stream or java.lang.OutOfMemory exceptions.

Anyone with a working example.


Solution

  • Here's a working example, supplied on an "as is" basis with no warranty :)

    BufferedImage scaleImage(BufferedImage sourceImage, int scaledWidth) {
       float scale = scaledWidth / (float) sourceImage.getWidth();
       int scaledHeight = (int) (sourceImage.getHeight() * scale);
       Image scaledImage = sourceImage.getScaledInstance(
          scaledWidth, 
          scaledHeight, 
          Image.SCALE_AREA_AVERAGING
       );
    
       BufferedImage bufferedImage = new BufferedImage(
          scaledImage.getWidth(null), 
          scaledImage.getHeight(null), 
          BufferedImage.TYPE_INT_RGB
       );
       Graphics g = bufferedImage.createGraphics();
       g.drawImage(scaledImage, 0, 0, null);
       g.dispose();
    
       return bufferedImage;
    }