How to rotate image in JavaScript?

In this article, you are going to learn how to rotate an image in JavaScript. In web development, performing images is a simple task.

Either you want to display images in a different adaptation or create interactive image galleries, rotating images constantly using JavaScript is a powerful and practical method.

How to rotate an image in JavaScript?

To rotate images in JavaScript, you can use the HTML5 Canvas element, which offers a powerful 2D drawing API.

Through the Canvas API, you can make a dynamic visual content, including rotating images.

Let’s move on the step-by-step process of rotating an image using JavaScript.

Setting Up the HTML Structure

Before we move on into the JavaScript code, let’s set up first the basic HTML structure.

We can create an HTML file and include an image element that will be rotated dynamically:

Here’s an example code:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>How to Rotate Image in JavaScript</title>
</head>
<body>
    <img id="imageToRotate" src="path/to/your/image.jpg" alt="Your Image">
</body>
</html>

You need to replace “path/to/your/image.png” with the actual path to your image file.

Writing the JavaScript Code

Next, add the JavaScript code to rotate the image using the HTML5 Canvas:

Example code:

<script>
    const rotateImage = (degrees) => {
        const image = document.getElementById('imageToRotate');
        const canvas = document.createElement('canvas');
        const context = canvas.getContext('2d');

        // Set canvas dimensions to match the image
        canvas.width = image.width;
        canvas.height = image.height;

        // Clear the canvas
        context.clearRect(0, 0, canvas.width, canvas.height);

        // Rotate the image
        context.save();
        context.translate(canvas.width / 2, canvas.height / 2);
        context.rotate((degrees * Math.PI) / 180);
        context.drawImage(image, -image.width / 2, -image.height / 2);
        context.restore();

        // Replace the original image with the rotated image
        image.src = canvas.toDataURL();
    };

    // Call the function to rotate the image by 90 degrees
    rotateImage(90);
</script>

Testing the Rotation

Now, open the HTML file in your web browser. You will see the image rotated by 90 degrees.

Feel free to adjust the rotateImage function’s parameter to rotate the image by different degrees as per your requirement.

Rotating Image Clockwise and Counterclockwise

Having able to rotate an image in a single direction is applicable, but what if you need to rotate an image both clockwise and counterclockwise?

Let’s change the JavaScript code to add this effectiveness.

Updating the JavaScript Code

<script>
    let rotationAngle = 0;

    const rotateImage = (degrees) => {
        rotationAngle += degrees;

        const image = document.getElementById('imageToRotate');
        const canvas = document.createElement('canvas');
        const context = canvas.getContext('2d');

        // Set canvas dimensions to match the image
        canvas.width = image.width;
        canvas.height = image.height;

        // Clear the canvas
        context.clearRect(0, 0, canvas.width, canvas.height);

        // Rotate the image
        context.save();
        context.translate(canvas.width / 2, canvas.height / 2);
        context.rotate((rotationAngle * Math.PI) / 180);
        context.drawImage(image, -image.width / 2, -image.height / 2);
        context.restore();

        // Replace the original image with the rotated image
        image.src = canvas.toDataURL();
    };

    // Call the function to rotate the image clockwise by 90 degrees
    rotateImage(90);

    // Call the function to rotate the image counterclockwise by 180 degrees
    rotateImage(-180);
</script>

Testing the Rotation

Open the HTML file again in your web browser, and now you will see the image rotated clockwise by 90 degrees and then counterclockwise by 180 degrees.

Creating an Interactive Image Rotator

Creating an interactive image rotator enables users to rotate the image using buttons or controls.

Let’s see the implementation of this functionality.

Enhancing the HTML Structure

Update the HTML structure to include buttons for clockwise and counterclockwise rotations:

Here’s an example code:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>How to Rotate Image in JavaScript</title>
</head>
<body>
    <img id="imageToRotate" src="path/to/your/image.jpg" alt="Your Image">
    <button onclick="rotateClockwise()">Rotate Clockwise</button>
    <button onclick="rotateCounterclockwise()">Rotate Counterclockwise</button>
</body>
</html>

Updating the JavaScript Code

<script>
    let rotationAngle = 0;

    const rotateImage = (degrees) => {
        rotationAngle += degrees;

        const image = document.getElementById('imageToRotate');
        const canvas = document.createElement('canvas');
        const context = canvas.getContext('2d');

        // Set canvas dimensions to match the image
        canvas.width = image.width;
        canvas.height = image.height;

        // Clear the canvas
        context.clearRect(0, 0, canvas.width, canvas.height);

        // Rotate the image
        context.save();
        context.translate(canvas.width / 2, canvas.height / 2);
        context.rotate((rotationAngle * Math.PI) / 180);
        context.drawImage(image, -image.width / 2, -image.height / 2);
        context.restore();

        // Replace the original image with the rotated image
        image.src = canvas.toDataURL();
    };

    const rotateClockwise = () => {
        rotateImage(90);
    };

    const rotateCounterclockwise = () => {
        rotateImage(-90);
    };
</script>

Testing the Interactive Image Rotator

Open the updated HTML file in your web browser. Now, you can use the “Rotate Clockwise” and “Rotate Counterclockwise” buttons to interactively rotate the image.

FAQs

Can I rotate an image using CSS instead of JavaScript?

Yes, you can rotate an image using CSS transforms, but it cannot provide dynamic or interactive rotations like JavaScript. CSS transforms are more suitable for static rotations or animations.

How can I rotate an image by a specific angle in JavaScript?

To rotate an image by a specific angle, pass that angle as a parameter to the rotateImage function.

Is it possible to rotate an image based on user input?

Yes, you can rotate an image based on user input. By using event listeners and capturing user actions, you can trigger the image rotation function in response to user interactions.

Conclusion

In this article, we have learned how to rotate images in JavaScript using the HTML5 Canvas element.

Also, we have discussed the basic image rotation concepts, allowed clockwise and counterclockwise rotations, and even implemented an interactive image rotator using JavaScript.

Additional Resources

Leave a Comment