Два возможных решения - уменьшить изображение, вот как вы это сделаете:
BufferedImage original = //your image here
scaled = original.getScaledInstance(finalWidth, finalHeight, Image.SCALE_SMOOTH); // scale the image to a smaller one
BufferedImage result = new BufferedImage(finalWidth, finalHeight, original.getType());
Graphics2D g = result.createGraphics();
g.drawImage(scaled, 0, 0, null); //draw the smaller image
g.dispose();
Очевидно, вам нужно рассчитать масштабированную ширину и высоту, чтобы изображение оставалось с тем же соотношением сторон.
Теперь, когда вы нарисовали его меньше, вы можете превратить это изображение в файл JPEG:
BufferedImage image = // this is the final scaled down image
JPEGImageEncoder jpegEncoder = JPEGCodec.createJPEGEncoder(output);
JPEGEncodeParam jpegEncodeParam = jpegEncoder.getDefaultJPEGEncodeParam(image);
jpegEncodeParam.setDensityUnit(JPEGEncodeParam.DENSITY_UNIT_DOTS_INCH);
jpegEncodeParam.setXDensity(92);
jpegEncodeParam.setYDensity(92);
jpegEncodeParam.setQuality( 0.8F , false);
jpegEncoder.encode(image, jpegEncodeParam);
Эти классы относятся к пакету JAI (точнее com.sun.image.codec.jpeg ), и JVM может жаловаться, что их не следует использовать напрямую, но вы могу игнорировать это.
Возможно, вы можете загрузить JAI с здесь , если он не работает, у меня есть настройка зеркал github для двух библиотек, JAI core и JAI ImageIO .