diff --git a/runelite-client/src/main/java/net/runelite/client/util/ImageUtil.java b/runelite-client/src/main/java/net/runelite/client/util/ImageUtil.java index 3fb1da78d8..ac25611df1 100644 --- a/runelite-client/src/main/java/net/runelite/client/util/ImageUtil.java +++ b/runelite-client/src/main/java/net/runelite/client/util/ImageUtil.java @@ -209,7 +209,38 @@ public class ImageUtil */ public static BufferedImage resizeImage(final BufferedImage image, final int newWidth, final int newHeight) { - final Image resized = image.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH); + return resizeImage(image, newWidth, newHeight, false); + } + + /** + * Re-size a BufferedImage to the given dimensions. + * + * @param image the BufferedImage. + * @param newWidth The width to set the BufferedImage to. + * @param newHeight The height to set the BufferedImage to. + * @param preserveAspectRatio Whether to preserve the original image's aspect ratio. When {@code true}, the image + * will be scaled to have a maximum of {@code newWidth} width and {@code newHeight} + * height. + * @return The BufferedImage with the specified dimensions + */ + public static BufferedImage resizeImage(final BufferedImage image, final int newWidth, final int newHeight, final boolean preserveAspectRatio) + { + final Image resized; + if (preserveAspectRatio) + { + if (image.getWidth() > image.getHeight()) + { + resized = image.getScaledInstance(newWidth, -1, Image.SCALE_SMOOTH); + } + else + { + resized = image.getScaledInstance(-1, newHeight, Image.SCALE_SMOOTH); + } + } + else + { + resized = image.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH); + } return ImageUtil.bufferedImageFromImage(resized); }