Изменение размера изображения - сохранить соотношение сторон - PullRequest
3 голосов
/ 01 апреля 2012

Как я могу изменить размер изображения и сохранить его соотношение сторон?

Это метод, который я использую:

private static BufferedImage resizeImage(BufferedImage originalImage,
            int type) {
        BufferedImage resizedImage = new BufferedImage(IMG_WIDTH, IMG_HEIGHT,
                type);
        Graphics2D g = resizedImage.createGraphics();
        g.drawImage(originalImage, 0, 0, IMG_WIDTH, IMG_HEIGHT, null);
        g.dispose();

        return resizedImage;
    }

Переменная type:

BufferedImage original = ImageIO.read(new File(imagePath));
int type = original.getType() == 0 ? BufferedImage.TYPE_INT_ARGB
                    : original.getType();

Проблема в том, что некоторые изображения имеют правильный размер, но другие теряют соотношение сторон из-за IMG_WIDTH и IMG_HEIGHT.

Есть ли способ получить исходные размеры изображения и затем применить некоторую пропорцию изменения размера, чтобы сохранить пропорции изображения с измененным размером?

Ответы [ 2 ]

7 голосов
/ 01 апреля 2012

Почему бы вам не использовать originalImage.getWidth() и originalImage.getHeight()? Тогда вы можете легко рассчитать соотношение сторон. Не забывайте, что int / int = int, поэтому вам нужно сделать

double ratio = 1.0 * originalImage.getWidth() / originalImage.getHeight();

or 

double ratio = (double) originalImage.getWidth() / originalImage.getHeight();

Что касается дополнительной математики, вы можете рассчитать

int height = (int) IMG_WIDTH/ratio;

int width = (int) IMG_HEIGHT*ratio;

Затем посмотрите, какой из них лучше соответствует вашим потребностям, и измените размер до (IMG_WIDTH, height) или (width, IMG_HEIGHT)

1 голос
/ 01 апреля 2012

Чтобы получить размер изображения, см. getWidth() / getHeight(). Остальное - просто сравнительная математика.

Предполагая, что IMG_WIDTH & IMG_HEIGHT представляют наибольший желаемый размер:

  • Найдите, кто первым достигнет лимита.
  • Рассчитайте соотношение между натуральным размером и этим максимальным размером.
  • Умножьте другой размер изображения на то же соотношение.
...