HTML-在保留宽高比的同时显示尽可能大的图像

时间:2020-03-06 15:00:28  来源:igfitidea点击:

我想要一个HTML页面,该页面显示单个PNG或者JPEG图像。我希望图像占据整个屏幕,但是当我这样做时:

<img src="whatever.jpeg" width="100%" height="100%" />

它只是拉伸图像并弄乱了宽高比。如何解决此问题,使图像具有正确的宽高比,同时缩放到可能的最大大小?

韦恩(Wayne)发布的解决方案几乎可以用,除非图像高且窗户宽。这段代码是对他的代码的略微修改,可以满足我的要求:

<html>
<head>
<script>
function resizeToMax(id){
    myImage = new Image() 
    var img = document.getElementById(id);
    myImage.src = img.src; 
    if(myImage.width / document.body.clientWidth > myImage.height / document.body.clientHeight){
        img.style.width = "100%";
    } else {
        img.style.height = "100%";
    }
}
</script>
</head>
<body>
<img id="image" src="test.gif" onload="resizeToMax(this.id)">
</body>
</html>

解决方案

试试这个:

<img src="whatever.jpeg" width="100%" height="auto" />

要搭载Franci Penov,是的,我们只想设置其中一个即可。如果图片较宽,则要将宽度设置为100%,并保留高度。如果图像较长,则要将高度设置为100%,并保留宽度。

这是一个快速功能,可以将高度或者宽度调整为100%,具体取决于哪个更大。经过FF3,IE7和Chrome测试

<html>
<head>
<script>
function resizeToMax(id){
    myImage = new Image() 
    var img = document.getElementById(id);
    myImage.src = img.src; 
    if(myImage.width > myImage.height){
        img.style.width = "100%";
    } else {
        img.style.height = "100%";
    }
}
</script>
</head>
<body>
<img id="image" src="test.gif" onload="resizeToMax(this.id)">
</body>
</html>

为此,JavaScript是朋友。我们想要做的是在页面加载,遍历dom并为每个图像(或者,如果只是一个图像,或者为一个函数传递一个图像id),请检查该图像的哪个属性更大,是高度还是宽度。

这是IMAGE本身,而不是标签。

知道后,将标签上的相应高度/宽度设置为100%,将另一个设置为自动

一些有用的代码-都是从我的头顶上摘下来的,因此语法可能会有所不同。

var imgTag = $('myImage'); 
var imgPath = imgTag.src; 
var img = new Image(); 
img.src = imgPath; 
var mywidth = img.width; 
var myheight = img.height;

顺便说一句,在服务器方面,这将是一件容易得多的任务。在服务器上,我们可以从字面上更改正在浏览器流式传输的图像的大小。

我们不一定要在更大的方向上延伸。例如,我有一个宽屏显示器,所以即使它的图像比它的身高要宽,从左向右拉伸它仍可能会夹住上下边缘。

我们需要计算窗口宽度和高度与图像宽度和高度之间的比率。一个较小的是控制轴,另一个取决于我们。即使两个轴都大于各自的窗口长度,也是如此。

<script type="text/javascript">
// <![CDATA[
function resizeToMax (id) {
    var img = document.getElementById(id);
    myImage = new Image();
    myImage.src = img.src;
    if (window.innerWidth / myImage.width < window.innerHeight / myImage.height) {
        img.style.width = "100%";
    } else {
        img.style.height = "100%";
    }
}
// ]]>
</script>