[Risolto] Resize proporzionale immagini

di il
3 risposte

[Risolto] Resize proporzionale immagini

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;
    }
}

3 Risposte

Devi accedere o registrarti per scrivere nel forum
3 risposte