如何在 HTML 中调整图像大小?
了解在 HTML 中调整图像大小的不同技术、何时应避免在浏览器端调整大小,以及在 Web 上操作和提供图像的正确方法。
如果您的图像不适合布局,您可以在 HTML 中调整其大小。在 HTML 中调整图像大小的最简单方法之一是使用标签上的height和width属性img。这些值指定图像元素的高度和宽度。这些值以 px 为单位设置,即 CSS 像素。
例如,原始图像为 640×960。
我们可以渲染它的高度为 500 像素,宽度为 400 像素
<img src="https://ik.imagekit.io/ikmedia/women-dress-2.jpg" width="400" height="500" />
如果图像元素所需的高度和宽度与图像的实际尺寸不匹配,则浏览器会缩小(或放大)图像。浏览器用于缩放的确切算法可能会有所不同,具体取决于底层硬件和操作系统。
客户端图像大小调整有几个缺点,主要是图像质量差和图像渲染速度较慢。为了克服这个问题,您应该从服务器提供已经调整大小的图像。您可以使用 Thumbor 或免费图像 CDN(如 ImageKit.io)使用 URL 参数动态调整图像大小。
在 CSS 中调整图像大小
您还可以在 CSS 中指定高度和宽度。
img {
width: 400px,
height: 300px
}
调整图像大小时保留纵横比
当您同时指定height和 时width,图像可能会丢失其纵横比。您可以通过仅指定width并设置height为auto使用 CSS 属性来保留纵横比。
img {
width: 400px,
height: auto
}
这将渲染一个 400 像素宽的图像。相应地调整高度以保留原始图像的纵横比。您也可以指定height属性并设置width为auto,但大多数布局通常受宽度限制而不是高度限制。
根据可用宽度进行调整的响应式图像
您可以指定百分比而不是绝对数字的宽度以使其具有响应性。通过设置width为100%,如果需要匹配父元素的宽度,图像将放大。这可能会导致图像模糊,因为图像可以放大到大于其原始尺寸。
img {
width: 100%;
height: auto;
}
或者,您可以使用该max-width属性。通过设置
max-width:100%;
如果必须,图像会缩小,但永远不会放大到大于其原始尺寸。
img {
max-width: 100%;
height: auto;
}
如何调整大小和裁剪图像以适合元素区域?
到目前为止,我们已经讨论了如何通过指定调整图像大小height
或width
或两者。
当您同时指定height和 时width,图像将被强制适应所要求的尺寸。它可以改变原始的纵横比。有时,即使图像的某些部分被裁剪,您也希望在图像覆盖整个区域时保留纵横比。为此,您可以使用:
- 背景图片
object-fit css
属性
调整背景图像的大小
background-image
是一个非常强大的 CSS 属性,它允许您在元素上插入图像而不是img. 您可以使用以下 CSS
属性控制图像的大小调整和裁剪
- background-size - 图像的大小
- background-position - 背景图像的起始位置
background-size
默认情况下,背景图像以其原始全尺寸呈现。您可以通过使用background-sizeCSS 属性设置高度和宽度来覆盖它。您可以根据需要向上或向下缩放图像。
<style>
.backround {
background-image: url("/image.jpg");
background-size: 150px;
width: 300px;
height: 300px;
border: solid 2px red;
}
</style>
<div class="backround">
</div>
的可能值background-size
:
auto
- 以全尺寸渲染图像
length
- 设置背景图像的宽度和高度。第一个值设置宽度,第二个值设置高度。如果只给出一个值,则第二个值设置为auto
。例如,100px
100px
或50px
。
percentage
- 以父元素的百分比设置背景图像的宽度和高度。第一个值设置宽度,第二个值设置高度。如果仅给出一个值,则第二个值设置为auto。例如,100% 100%或50%。
它还具有 2 个特殊值contain和img:
background-size:contains
contains
- 它保留图像的原始纵横比,但图像被调整大小以使其完全可见。无论包含框的大小如何,高度或宽度中最长的将适合给定的尺寸。
<style>
.backround {
background-image: url("/image.jpg");
background-size: contains;
width: 300px;
height: 300px;
border: solid 2px red;
}
</style>
<div class="backround">
</div>
background-size:img
img - 它保留原始纵横比但调整图像大小以覆盖整个容器,即使它必须放大图像或裁剪它。
<style>
.backround {
background-image: url("/image.jpg");
background-size: img;
width: 300px;
height: 300px;
border: solid 2px red;
}
</style>
<div class="backround">
</div>
适合对象的 CSS 属性
您可以使用元素object-fit上的CSS 属性img来指定应如何调整图像大小和裁剪以适合容器。在引入这个 CSS 属性之前,我们不得不求助于使用背景图像。
除了inherit, initial, 和 之外unset,对象拟合还有 5 个可能的值:
- contain:它保留图像的原始纵横比,但调整了图像大小以使其完全可见。无论包含框的大小如何,高度或宽度中最长的将适合给定的尺寸。
- img:它保留原始纵横比但调整图像大小以覆盖整个容器,即使它必须放大图像或裁剪图像。
- fill: 这是默认值。图像将填充其给定区域,即使这意味着失去其纵横比。
- none: 图像根本没有调整大小,原始图像大小填充给定区域。
- scale-down:包含或无中较小的一个。
如果object-position
正在渲染图像的裁剪部分,您可以使用来控制图像的起始位置。
让我们通过例子来理解这些。
下图的原始宽度为 1280 像素,高度为 854 像素。在这里,它使用 拉伸到最大可用宽度max-width: 100%。
<img src="https://ik.imagekit.io/ikmedia/backlit.jpg"
style="max-width: 100%;" />
适合对象:包含
<img src="https://ik.imagekit.io/ikmedia/backlit.jpg"
style="object-fit:contain;
width:200px;
height:300px;
border: solid 1px #CCC"/>
图像的原始纵横比相同,但图像已调整大小以使其完全可见。我们1px在图像周围添加了边框来展示这一点。
适合对象:封面
<img src="https://ik.imagekit.io/ikmedia/backlit.jpg"
style="object-fit:img;
width:200px;
height:300px;
border: solid 1px #CCC"/>
原始纵横比被保留,但为了覆盖整个区域,图像从左侧和右侧被剪裁。
对象匹配:填充
<img src="https://ik.imagekit.io/ikmedia/backlit.jpg"
style="object-fit:fill;
width:200px;
height:300px;
border: solid 1px #CCC"/>
图像被强制放入一个 200 像素宽、高度为 300 像素的容器中,原始纵横比不会保留。
对象适合:无
<img src="https://ik.imagekit.io/ikmedia/backlit.jpg"
style="object-fit:none;
width:200px;
height:300px;
border: solid 1px #CCC"/>
适合对象:缩小
<img src="https://ik.imagekit.io/ikmedia/backlit.jpg"
style="object-fit:scale-down;
width:200px;
height:300px;
border: solid 1px #CCC"/>
object-fit:img 和 object-position :right
<img src="https://ik.imagekit.io/ikmedia/backlit.jpg"
style="object-fit:img;
object-position: right;
width:200px;
height:300px;
border: solid 1px #CCC"/>
客户端图像大小调整的缺点
您应该记住客户端调整大小的某些缺点。
1. 图像渲染慢
由于在浏览器中调整大小之前无论如何都会加载全尺寸图像,因此完成下载和最终渲染需要更多时间。这意味着,如果您有一张 1.5 兆字节的 1024 × 682 大照片并以 400 像素的宽度显示,则访问者会在浏览器将其缩小到 400 像素之前下载整个 1.5 兆字节的图像。
您可以在网络面板上看到此下载时间.
另一方面,如果您使用某些程序或图像 CDN在服务器上调整图像大小,则浏览器不必加载大量数据并浪费时间解码和渲染它。
使用 ImageKit.io,您可以使用URL 参数轻松调整图像大小。例如 -
原图
https://ik.imagekit.io/ikmedia/women-dress-2.jpg
保留纵横比的 400 像素宽图像
https://ik.imagekit.io/ikmedia/women-dress-2.jpg?tr=w-400
2. 画质差
浏览器使用的精确缩放算法可能会有所不同,其性能取决于底层硬件和操作系统。当相对较大的图像调整大小以适应较小的容器时,最终图像可能会明显模糊。
在速度和质量之间存在权衡。最终选择取决于浏览器。Firefox 3.0 及更高版本使用双线性重采样算法,该算法针对高质量而不是速度进行了调整。但这可能会有所不同。
您可以使用image-renderingCSS 属性,该属性定义浏览器在从原始尺寸放大或缩小时应如何呈现图像。
/* Keyword values */
image-rendering: auto;
image-rendering: crisp-edges;
image-rendering: pixelated;
/* Global values */
image-rendering: inherit;
image-rendering: initial;
image-rendering: unset;
3. 带宽浪费
由于无论如何都要加载全尺寸图像,因此会浪费本可以节省的带宽。数据传输并不便宜。除了增加您的带宽费用之外,它还会花费您的用户真钱。
如果您使用的是图像 CDN,您可以通过提供下一代格式(例如 WebP 或 AVIF)的图像来进一步减少带宽消耗。
用户友好的仪表板还将显示您到目前为止节省了多少带宽
查看 ImageKit 仪表板中的实际节省
4. 增加对客户端设备的内存和处理要求
调整大图像以适应更小的容器是昂贵的,并且在内存和处理能力都有限的低端设备上可能会很痛苦。这会减慢整个网页的速度并降低用户体验。
概括
在实现网页时,图像需要完美地适应布局。为了能够实现响应式设计,您需要记住以下几点:
- 如果可以,请完全避免客户端(浏览器)调整大小。这意味着从服务器提供正确大小的图像。它导致更少的带宽使用、更快的图像加载和更高的图像质量。如果你想自己实现它,有很多开源图像处理库。或者更好的是,您可以使用免费的图像 CDN,它只需几行代码即可提供所有这些功能以及更多功能。
- 永远不要放大光栅图像,即 JPEG、PNG、WebP 或 AVIF 图像,永远不要放大,因为它会导致输出模糊。
如果设计中的多个维度需要,您应该对图标和图形使用 SVG 格式。 - 虽然调整大小,如果你想保留原始图像的长宽比-只有指定的一个width和height,并设置对方auto。
- 如果您希望图像在保留纵横比的同时适合整个容器,即使某些部分被裁剪或图像被放大 -
- 使用- object-fitCSS 属性或使用CSS 属性设置背景图像background-image。
使用object-position时使用控制图像的起始位置object-fit。在背景图像中,使用background-position.
如何在 HTML 中调整图像大小?的更多相关文章
- C#中如何调整图像大小
在本篇文章中,我将介绍如何在C#中来调整你想要的图像大小.要实现这一目标,我们可以采取以下几个步骤: 1.首先要获取你想要调整大小的图像: string path = Server.MapPath(& ...
- [译]Android调整图像大小的一些方法
翻译自 某大神在Stack Overflow里的自问自答 (一般我们将Bitmap翻译为位图,但为了更好理解,在本文中我将它翻译成图像): 我们在开发的时候,经常需要从服务器中加载图像到客户端中,但有 ...
- (opencv08)cv.resize()调整图像大小
(opencv08)cv.resize()调整图像大小 img = cv2.resize(src, dsize, dst=None, fx=None, fy=None, interpolation=N ...
- PHP获取远程图片并调整图像大小(转)
<?php /** * *函数:调整图片尺寸或生成缩略图 *修改:2013-2-15 *返回:True/False *参数: * $Image 需要调整的图片(含路径) * $Dw=450 调整 ...
- PHP获取远程图片并调整图像大小
<?php /** * *函数:调整图片尺寸或生成缩略图 *修改:2013-2-15 *返回:True/False *参数: * $Image 需要调整的图片(含路径) * $Dw= ...
- XCode中调整字体大小
转自:http://www.cnblogs.com/mengshu-lbq/archive/2012/12/24/2830859.html 1)调出Xcode的preference应该是 Comman ...
- Linux中如何使用gThumb批量调整图片大小
Linux中如何使用gThumb批量调整图片大小 导读 如果你的工作涉及到图片编辑和处理,就一定会有同时对多张图片进行批量大小调整的经历.虽然大多数图片编辑应用都能够非常容易地批量调整多张图片,但对于 ...
- CSS 是怎样确定图像大小的?
本文转自奇舞周刊学习使用侵权删 先来看个例子,热热身. 上面这张图像的原始尺寸是:宽 54px 高 49px. 那么,在以下代码中,每张图像显示的最终尺寸是多少? https://p1.ssl.qhi ...
- 如何在 python 中提取图片主题色
前言 在 Groove 音乐中,当我们改变歌曲时,底部播放栏的颜色会随专辑封面而变,比如下图中播放栏的颜色变成了 aiko 衣服的颜色.下面我们会在 python 中实现相同的效果,也就是提取出图片中 ...
随机推荐
- python自动将新生成的报告作为附件发送并进行封装
发送报告作为自动化部署来讲是一个重要的环节,废话不多说直接上代码吧,如果想更细致的了解内容查阅本博主上篇基本发送文章 特别叮嘱一下:SMTP协议默认端口25,qq邮箱SMTP服务器端口是465 别出丑 ...
- Tomcat部署接口环境遇到的问题,有没有人能帮忙解决指导一下
1.在虚拟机中用Tomcat部署一个接口环境:linux+jdk+Tomcat 前提条件:代码包啥的别人都用过,可以部署成功 2.具体部署: a. 利用xftp把所有的代码包war包传送到tomcat ...
- ACM-由数据范围反推算法复杂度以及算法内容
一般ACM或者笔试题的时间限制是1秒或2秒. 在这种情况下,C++代码中的操作次数控制在 \(10^7\) 为最佳. 下面给出在不同数据范围下,代码的时间复杂度和算法该如何选择: 数据范围 算法选择 ...
- JavaScript写放大镜效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- linux安装源码包指定安装目录
当下载完一个源码包并且解压后 文件夹下会有一个重要的文件configure configure 文件是一个可执行的脚本文件,它将检查目标系统的配置和可用功能,比如一些检查依赖或者启用禁用一些模块,它有 ...
- 【react】什么是fiber?fiber解决了什么问题?从源码角度深入了解fiber运行机制与diff执行
壹 ❀ 引 我在[react] 什么是虚拟dom?虚拟dom比操作原生dom要快吗?虚拟dom是如何转变成真实dom并渲染到页面的?一文中,介绍了虚拟dom的概念,以及react中虚拟dom的使用场景 ...
- 简单实现python接口自动化(一)
目的:excel中维护接口用例数据,通过python中requests库进行读取用例,并把运行结果与excel中的预期结果对比,最后把执行情况写入到excel中去. excel维护数据: 具体的接口名 ...
- 零基础学Python:元组(Tuple)详细教程
Python的元组与列表类似,不同之处在于元组的元素不能修改,元组使用小括号,列表使用方括号,元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可https://jq.qq.com/?_wv=1 ...
- java反序列化漏洞专项
背景条件:java的框架,java的应用程序,使用序列化,反序列化操作非常多.在漏洞挖掘中,代码审计中,安全研究中,反序列化漏洞是个重点项,不可忽视.尤其是java应用程序的rce,10个里面有7个是 ...
- SDK导入问题 __imp_与__imp__
目前刚刚实习一周,接触的第一个项目是CMake编译的QT项目,需要引入公司的SDK,编译能过去但是程序就是找不到SDK的接口, 排查了半天发现问题在于:公司的SDK是32位的,自己项目的build k ...