Il mio problema e' ridimensionare delle immagini per una risoluzione 1920x1080 mantenendo le proporzioni del lato piu' corto.
Facendo prove con GIMP con un paio di immagini e ridimensionando il lato piu' lungo ho le seguenti proporzioni:
600x300 -> 1920x960
600x950 -> 682x1080
Il mio programma ridimensiona le stesse immagini con le seguenti proporzioni:
600x300 -> 1920x900
600x950 -> 600x1080
Chiaramente il ridimensionamento del programma non e' corretto. Dove sbaglio?
Grazie
public class ImageResizer {
private static final int IMG_WIDTH = 1920;
private static final int IMG_HEIGHT = 1080;
public static void main(String [] args) {
try {
BufferedImage originalImage = ImageIO.read(new File("/tmp/imageBS_2015-09-28_0.jpg"));
int type = originalImage.getType() == 0 ? BufferedImage.TYPE_INT_ARGB : originalImage.getType();
BufferedImage resizeImageJpg = resizeImage(originalImage, type);
ImageIO.write(resizeImageJpg, "jpg", new File("/tmp/1_jpg.jpg"));
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
private static BufferedImage resizeImage(BufferedImage originalImage, int type){
int origHeight = originalImage.getHeight();
int origWidth = originalImage.getWidth();
int newHeight = 0;
int newWidth = 0;
System.out.println(origHeight + " x " + origWidth);
if (origWidth / origHeight > IMG_WIDTH / IMG_HEIGHT) {
newWidth = IMG_WIDTH;
newHeight = newWidth / origWidth * origHeight;
} else {
newHeight = IMG_HEIGHT;
newWidth = newHeight / origHeight * origWidth;
}
BufferedImage resizedImage = new BufferedImage(newWidth, newHeight, type);
Graphics2D g = resizedImage.createGraphics();
g.drawImage(originalImage, 0, 0, newWidth, newHeight, null);
g.dispose();
return resizedImage;
}
}