package ch.claude_martin.foo; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; public class SomeClass { public static void main(String[] args) throws IOException { var input = "C:/picture.jpg"; var output = "C:/rotated_picture.jpg"; var img = ImageIO.read(new File(input)); var rotated = rotateBufferedImage(img, -90); ImageIO.write(rotated, "jpg", new File(output)); } /** * Rotates an image. Note that an angle of -90 is equal to 270. * * @param img The image to be rotated * @param angle The angle in degrees (must be a multiple of 90°). * @return The rotated image, or the original image, if the effective angle is * 0°. */ public static BufferedImage rotateBufferedImage(BufferedImage img, int angle) { if (angle < 0) { angle = 360 + (angle % 360); } if ((angle %= 360) == 0) { return img; } final boolean r180 = angle == 180; if (angle != 90 && !r180 && angle != 270) throw new IllegalArgumentException("Invalid angle."); final int w = r180 ? img.getWidth() : img.getHeight(); final int h = r180 ? img.getHeight() : img.getWidth(); final int type = img.getType() == BufferedImage.TYPE_CUSTOM ? BufferedImage.TYPE_INT_ARGB : img.getType(); final BufferedImage rotated = new BufferedImage(w, h, type); final Graphics2D graphic = rotated.createGraphics(); graphic.rotate(Math.toRadians(angle), w / 2d, h / 2d); final int offset = r180 ? 0 : (w - h) / 2; graphic.drawImage(img, null, offset, -offset); graphic.dispose(); return rotated; } }