DulcetAirman icon

rotateBufferedImage

DulcetAirman | PRO | 04/20/22 06:37:10 AM UTC (Edited) | 0 ⭐ | 1141 👁️ | Never ⏰ | []
Java |

1.63 KB

|

None

|

0 👍

/

0 👎

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

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎