css js 实现图片居中裁剪成正方形(不变形)

网页中如何使用 css + js 实现图片居中裁剪成正方形,并且不变形?

实现思路是先获取图片的宽高,比较一下大小然后设置图片的宽或者高为 100% 高或者宽为 auto;然后设置图片父元素为 flex 布局,其子元素(图片)上下左右居中即可。

详细代码如下:

<!doctype html>
<html>

<head>
    <meta charset="utf-8">
    <title>图片自动截取中间正方形显示</title>
    <!--适应移动端-->
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!--css样式-->
    <style>
        body {
            background-color: #000;
            color: #fff;
        }
    </style>
</head>

<body>
    <div style="width: 100px;height: 100px;overflow:hidden;display: flex;justify-content: center;    align-items: center;">
        <img src="https://www.a4z.cn/img/a4p.jpg" id="img" style="flex: none;" />
    </div>

    <span id="console"></span>

    <script type="text/javascript">
        var $img = document.querySelector('#img');
        getRealImageSize($img.src, function(width, height) {
            if (width > height) {
                $img.style.height = '100%';
                $img.style.width = 'auto';
            } else {
                $img.style.width = '100%';
                $img.style.height = 'auto';
            }
        });

        function getRealImageSize(url, callback) {
            var img = new Image();
            img.src = url;

            // 如果图片被缓存,则直接返回缓存数据
            if (img.complete) {
                callback(img.width, img.height);
            } else {
                // 完全加载完毕的事件
                img.onload = function() {
                    callback(img.width, img.height);
                }
            }
        }
    </script>

</body>

</html>