<!DOCTYPE html>
<style>
    div.container {
        display: inline-block;
        margin-right: 20px; 
        margin-bottom: 10px; 
        width: 100px; 
        vertical-align: top;
    }
    div.horizontal {
        width: 102px;
        height: 52px;
    }
    div.vertical {
        width: 52px;
        height: 102px;
    }
    img {
        border: 1px solid black;
        image-orientation: none;
    }
</style>
<body>
    <b>The images of the  &lt;img&gt; elements should respect their EXIF orientation after setting their style image-orientation to "from-image".</b>
    <br>
    <br>
    <div class="container">
        <div class="horizontal">
            <img id="img1" src="resources/exif-orientation-1-ul.jpg">
        </div>
        <br>Normal
    </div>
    <div class="container">
        <div class="horizontal">
            <img id="img2" src="resources/exif-orientation-2-ur.jpg">
        </div>
        <br>Flipped horizontally
    </div>
    <div class="container">
        <div class="horizontal">
            <img id="img3" src="resources/exif-orientation-3-lr.jpg">
        </div>
        <br>Rotated 180&deg;
    </div>
    <div class="container">
        <div class="horizontal">
            <img id="img4" src="resources/exif-orientation-4-lol.jpg">
        </div>
        <br>Flipped vertically
    </div>
    <br>
    <div class="container">
        <div class="vertical">
            <img id="img5" src="resources/exif-orientation-5-lu.jpg">
        </div>
        <br>Rotated 90&deg; CCW and flipped vertically
    </div>
    <div class="container">
        <div class="vertical">
            <img id="img6" src="resources/exif-orientation-6-ru.jpg">
        </div>
        <br>Rotated 90&deg; CCW
    </div>
    <div class="container">
        <div class="vertical">
            <img id="img7" src="resources/exif-orientation-7-rl.jpg">
        </div>
        <br>Rotated 90&deg; CW and flipped vertically
    </div>
    <div class="container">
        <div class="vertical">
            <img id="img8" src="resources/exif-orientation-8-llo.jpg">
        </div>
        <br>Rotated 90&deg; CW
    </div>
    <br>
    <div class="container">
        <div class="horizontal">
            <img id="img9" src="resources/exif-orientation-9-u.jpg">
        </div>
        <br>Undefined (invalid value)
    </div>
    <br>
    <ul id="console"></ul>
    <script>
        function log(str) {
            var li = document.createElement("li");
            li.appendChild(document.createTextNode(str));
            var console = document.getElementById("console");
            console.appendChild(li);
        }

        function imageSize(el) {
            var computedStyle = window.getComputedStyle(el);
            return computedStyle.width + " by " + computedStyle.height;
        }

        window.addEventListener('load', (event) => {
            for(var i = 1; i <= 9; i++)
                document.getElementById("img" + i).style.imageOrientation = "from-image";
            for(var i = 1; i <= 9; i++)
                log("img" + i + " size = " + imageSize(document.getElementById("img" + i)));
        });
    </script>
</body>
