如何使用通用API实现响应式图片处理

在这篇文章里,我们要一起探索WordPress里的响应式图像API。我们会提到响应式图像是什么,为什么要用它们,WordPress是怎么让这些图像工作的,以及如果你想自定义这些图像,该怎么做。

如何使用通用API实现响应式图片处理

什么是响应式图像?

响应式图像是可以适应正在查看的设备的屏幕尺寸的图像。这很重要,因为这意味着无论在什么设备上查看图像,图像总是看起来不错。

让我们看一个例子

大多数现代浏览器都有一种特殊的模式,用于在移动设备上查看网页布局。在基于 Chrome 的浏览器中,它称为设备模式,在 Firefox 和 Safari 中,它称为响应式设计模式。您通常可以从浏览器的开发人员工具访问它。启用此模式后,您可以看到网页在不同设备上的外观。

如果您查看此示例中的标题图像,您会发现当您在移动设备上查看它时它会被裁剪。然而,内容区域中的图像却没有,它只是以较小的尺寸显示图像。

因此,您可能希望能够在移动设备上显示该图像的裁剪版本,并在桌面设备上显示完整图像。这就是响应式图像的用武之地。

正如您在此响应式图像示例中所看到的,当您切换到移动设备时,标题图像和主要内容图像都会被裁剪。

虽然响应式图像如何工作的知识超出了本教程的范围,但您可以在MDN Web 文档中阅读有关如何实现响应式图像的更多信息。

如何使用通用API实现响应式图片处理

WordPress 响应式图像 API

srcset自 WordPress 4.4 起,通过包含和属性函数sizes生成的图像标记,WordPress 原生支持响应式图像。这意味着它默认处于启用状态,并且 WordPress 生成的任何图像都会自动响应。wp_get_attachment_image()

为了理解它是如何工作的,让我们看一个简单的例子。

首先,将图像添加到 WordPress 站点的媒体库中。

如果您随后浏览到上传目录并查看图像的存储位置,您将看到该图像有多个版本。

这是因为 WordPress 会自动生成不同尺寸的多个版本的图像,然后可以在不同的上下文中使用它们。

在响应式图像出现之前,开发人员会尝试根据设备类型向浏览器动态提供不同的图像。服务器将检查正在使用的设备大小,然后提供适当的图像。

这可以通过使用用户代理字符串来实现,该字符串是浏览器发送到服务器的字符串,包含有关所使用的浏览器和设备的信息。

// check the $_SERVER["HTTP_USER_AGENT"] variable to see if this is a mobile device request
$isMob = is_numeric(strpos(strtolower($_SERVER["HTTP_USER_AGENT"]), "mobile")); 

if($isMob){ 
    echo 'Using Mobile Device...'; 
}else{ 
    echo 'Using Desktop...'; 
}

但是,这使得测试变得困难,因为您需要在物理设备上进行测试,使用BrowserStack等服务,或者在测试环境中设置用户代理字符串。

响应式设计使用媒体查询等内容来渲染单个页面,该页面将根据视口宽度和显示密度等内容在浏览器中做出响应。响应式图像遵循此策略,并将所有信息预先发送到浏览器,让浏览器负责加载适当的图像,而不是在页面加载之前在服务器上做出这些决定。

让我们通过将图像添加到帖子中并在编辑器中将其大小设置为完整大小来查看此操作的实际效果。

当您预览图像时,您会发现图像标记不仅仅包含图像 URL。它还包含一个srcset属性和一个sizes属性。

<img decoding="async" fetchpriority="high" width="799" height="533" src="https://learnpress.test/wp-content/uploads/2023/09/water-4.jpeg" alt="" class="wp-image-9" 
     srcset="
     https://learnpress.test/wp-content/uploads/2023/09/water-4.jpeg 799w, 
     https://learnpress.test/wp-content/uploads/2023/09/water-4-300x200.jpeg 300w, 
     https://learnpress.test/wp-content/uploads/2023/09/water-4-768x512.jpeg 768w" 
     sizes="(max-width: 799px) 100vw, 799px">

让我们仔细看看这个图像标签,以了解这些属性的作用。

srcset属性包含 WordPress 生成的图像的所有不同版本的列表,以及该图像的宽度(以像素为单位)。

在本例中,图像有 3 个不同版本,宽度分别为799769300

sizes属性指定每个媒体条件列表的图像布局宽度。在此示例中,媒体条件为(max-width: 799px),并且有两个布局宽度100vw799px100vw表示图像将以视口宽度的 100% 显示,799px表示图像将以 799px 显示。

因此,在本例中,如果视口宽度小于 799px,则图像将以视口宽度的 100% 显示,否则将以 799px 的宽度显示图像。

然后,浏览器可以使用此信息来根据正在查看图像的设备(由其视口宽度确定)来确定要加载哪个图像。不再需要服务器端逻辑,从而加快页面请求时间。由于图像是静态提供的,因此浏览器可以缓存它们,从而进一步加快页面加载时间。

新功能和挂钩

WordPress 4.4 引入了许多新函数和挂钩,使使用响应式图像变得更加容易。

为了防止向srcset属性添加非常大的图像,添加了一个max_srcset_image_width 过滤器,它允许主题为列表中包含的图像设置最大图像宽度srcset。默认值为 2048 像素。

自定义响应式图像标记

如果需要,还可以自定义响应式图像标记。

您可以使用过滤器过滤器来修改默认值srcsetsizes属性,或者使用 wp_get_attachment_image_attributes 过滤器覆盖未嵌入帖子内容中的图像的或属性(例如帖子缩略图、图库等) ,类似于其他图像属性被修改。wp_calculate_image_srcset wp_calculate_image_sizes srcsetsizes

如果您正在开发主题,您还可以使用 函数 创建您自己的自定义标记wp_get_attachment_image_srcset 模式

让我们看一个例子。

假设您想要生成一个输出img该图像的标签的函数,但您只想渲染中等大小的图像,并设置一个自定义sizes属性。

默认情况下,在视口宽度小于 799 像素的情况下以 100% 的视口显示图像,在更宽的视口上以 799 像素的宽度显示图像,而您希望将尺寸属性设置为使用 768 像素的中等图像宽度。

这意味着您需要将 size 属性设置为(max-width: 768px) 100vw, 768px

function get_custom_responsive_image( $attachment_id ) {
	$img_src    = wp_get_attachment_image_url( $attachment_id, 'medium' );
	$img_srcset = wp_get_attachment_image_srcset( $attachment_id, 'medium' );
	echo '<img src="' . $img_src . '" srcset="' . $img_srcset . '" sizes="(max-width: 768w) 100vw, 768px" alt="Our custom responsive image">';
}

然后,您可以在任何支持 PHP 的主题文件中调用此函数,例如经典主题中的模板和模板部分,或块主题中的块模式。

在此示例中,它被添加到“二十二十三”主题的页脚默认模式中,位于该模式顶部的组块内。图像 ID 是 9,您可以将其传递给函数:

	<!-- wp:group {"align":"wide"} -->
	<div class="wp-block-group alignwide" style="padding-top:var(--wp--preset--spacing--40)">
		<?php get_custom_responsive_image( 9 ); ?>
	</div>
	<!-- /wp:group -->

如果您在前端查看此内容,您可以看到自定义尺寸属性已用于该特定图像。

如果您在设备模式下对此进行测试,您将看到在设备尺寸低于 768 像素时,图像以视口宽度的 100% 显示,而在尺寸高于 768 像素时,图像以 768 像素的宽度显示。


联系我们
文章看不懂?联系我们为您免费解答!免费助力个人,小企站点!
电话:020-2206-9892
QQ咨询:1025174874
邮件:info@361sale.com
工作时间:周一至周五,9:30-18:30,节假日休息
发布者:光子波动,转转请注明出处:https://www.361sale.com/6649/

(0)
上一篇 2024年 3月 29日 下午2:55
下一篇 2024年 3月 29日 下午3:30

相关推荐

  • WordPress 未登录用户(游客)只显示文章中一张图片 用于引导用户注册

    有的时候我们发布文件,会添加多个图片,但是怎么让未登录用户(游客)只能看到一张图片呢?用户登录后,可看到文章内所有的图片。那本文就介绍以下,修改文件代码,达到这个效果,从而可以引导用户注册。 第一步,在主题文件夹下的funtions.php(路径 /wp-content/themes/你的主题名/funtions.php)文件里添加以下代码(文件末尾) 第二…

    2024年 4月 16日
    0013
  • 如何在 WordPress 中创建最近评论页面

    想在你的WordPress网站上展示所有最新的评论吗?这可是个吸引用户参与讨论的比较好用的方法。现在,有了“最新评论”区块,在WordPress上创建这样的页面变得非常简单。我们会告诉你如何在WordPress中轻松创建最近评论页面。 为什么要创建最近的评论页面? 评论在构建WordPress网站社区时非常重要。它们让读者能够参与讨论,提问,与我们站长互动。…

    2024年 4月 17日 WordPress自学建站
    0013
  • WordPress 6.5新特性:块绑定API使用示例详解

    WordPress 6.5推出了一项新功能:块绑定API(Block Bindings API)。这是一个让块编辑器更易用的工具,可以让你更简单地把各种数据加到网站的不同部分。这意味着你在编辑时,需要写的自定义代码会少很多。 什么是块绑定 API? 假如你有一个基本的块,在网页上需要用这个块显示一些特定来源的信息,比如文章的详细信息或者是一些自定义…

    2024年 3月 21日 WordPress自学建站
    0044
  • WordPress中如何屏蔽特定IP地址:详细指南

    想要阻止某些特定IP地址访问您的WordPress网站吗? 使用阻止IP地址的方法可以帮您避免网站受到垃圾邮件和黑客攻击。 本文会指导您如何在WordPress里设置阻止特定IP地址,并教您如何确定哪些IP地址需要被阻止。 什么是IP地址? 每个连上互联网的设备都会被分配一个独特的IP地址,类似于我们现实生活中的地址系统,包括国家、街道和门牌号。一个IP地址…

    2024年 3月 22日 WordPress自学建站
    0065
  • WordPress网站发布指南:如何发布产品、视频、案例和下载资料

    B2B企业一旦买好域名和服务器,接下来的步骤就是安装WordPress和启用模板,这样第一阶段的工作基本上就完成了。紧接着的任务是整理并发布内容,包括文章、产品、视频、案例和下载资料等。这些内容对于B2B企业在搜索引擎优化(SEO)和关键词排名上起着重要的作用。 但是,WordPress默认的内容管理系统只支持页面和文章,并不直接支持产品、视频、案例、下载资…

    2024年 3月 22日 WordPress自学建站
    0043

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

联系我们

020-2206-9892

QQ咨询:1025174874

邮件:info@361sale.com

工作时间:周一至周五,9:30-18:30,节假日休息

客服微信