Я использовал комбинацию ImageIO и imgscalr :
import javax.imageio.ImageIO;
import org.imgscalr.Scalr;
InputStream myPhotoInputStream = // new FileInputStream(file)
// or FileItemStream.openStream(); from an HTTP upload
OutputStream outstream = ...
BufferedImage image = ImageIO.read( myPhotoInputStream );
int maxDimension = 1024;
image = Scalr.resize(image, maxDimension);
ImageIO.write(image, "JPEG", outstream);
К сожалению, при изменении размера вы теряете метаданные EXIF.Мне еще предстоит найти библиотеку, способную просто сохранить это при чтении и восстановить его при записи.Apache commons-imaging выглядел многообещающе, но, похоже, не смог написать JPEG.