首页 后端开发 php教程 Web 图像:完美(自动)调整大小和转换

Web 图像:完美(自动)调整大小和转换

Nov 21, 2024 am 09:54 AM

Web Images: Resize and Convert Perfectly (and Automatically)

几乎每个前端开发人员都知道,我们需要在不影响质量的情况下向用户提供尽可能小的图像。我们都知道如何实现这一目标。但这是一件没人喜欢做的苦差事。同样从商业角度来看,这需要时间,而时间就是金钱。所以,“足够好”就够了。

让我分享一下我们如何改进和自动化完美图像交付,而不会给开发人员带来更多工作。

通常是如何完成的

也许不是你,但有很多人——可能是我们大多数人。

您以 2 倍预期尺寸导出 PNG 图片,以满足高密度屏幕的需求,并将其用于 Web 图像:完美(自动)调整大小和转换 中。标签。如果您愿意多花 30 秒(或更长时间),您可以做得更好:将其转换为 WebP 并将两个版本放在 中。元素,让浏览器选择最好的一个(好吧,不是最好的,只是最新支持的并且浏览器最喜欢的格式)。

这就是“足够好”,而且通常确实如此。

但这并不完美。新的 iPad 很大,可以使用 2.5 倍甚至 3 倍的图像。另一方面,标准的企业 Lenovo ThinkPad 不需要额外的细节,1× 图像就完美了。

老实说,这一切对于手工工作来说都很好。没有人可以在一张照片上花费 15 分钟。

自动化至完美

对于我的完美主义大脑来说,“足够好”并不是这句话所说的那样。此外,我们的一些客户处于竞争激烈的领域,因此我们开始研究选择。没过多久。我们已经知道浏览器会发送 HTTP 标头来指示它们支持的图像格式。

我们需要的是找出元素可以根据给定屏幕的像素密度加载图像。这是服务器端渲染很难做到的事情,并且由于多种原因,通过 JavaScript 调整 src 是不可能的。

有了这个,我们就拥有了所需的一切:

  • 服务器可以提供的格式
  • 前端开发者请求的图片尺寸
  • 显示屏的像素密度

过程

以下是我们如何自动化图像优化过程:

  1. 接受任何图片上传

    我们让开发者和管理员上传并保存他们想要的任何图片(当然开发者需要更加小心)。我们的系统可以处理任何事情 - 甚至是直接来自 DSLR 相机的 250 MB JPEG,我们成功地对其进行了转换和调整大小,然后当我们看到日志时放声大笑。

  2. 自动转换和压缩

上传图片后,我们的系统会自动:

  • 将其转换为多种格式:PNGWebPAVIF
  • 使用 90% 质量 设置压缩每个版本。

为什么是90%?因为最后 10% 的质量往往会导致收益大幅递减。您可以节省大量存储空间和带宽,而且视觉质量不会出现任何明显差异。

  1. 生成多个分辨率

    对于每个图像,我们根据像素密度乘数生成多个尺寸:

  • 1.5×
  • 这可确保具有高分辨率屏幕的设备获得清晰的图像,而其他设备则接收适当大小的图像。

    为了面向未来,我们只需添加或更改数字,一切都会自动处理(我们还没有制作 VR / AR 内容,但我怀疑这就是它会派上用场的技术)。

  1. 动态图像服务

    在我们的 HTML 模板中,我们指定所需的图像尺寸(宽度或高度)。然后我们的服务器端代码:

  • 检查优化图像是否存在。
  • 如果没有,请将它们排队等待处理。
  • 生成适当的具有像素密度 srcset 的元素。

    浏览器会根据设备的功能自动选择最佳图像。

结果如下所示:

<picture>
  <source srcset="/Upload/2024/03/11/tn-w200-frantisek.webp 1x,
                   /Upload/2024/03/11/tn-w300-frantisek.webp 1.5x,
                   /Upload/2024/03/11/tn-w400-frantisek.webp 2x,
                   /Upload/2024/03/11/tn-w600-frantisek.webp 3x">
  <img width="2222" height="2963" loading="lazy" alt="Video poster">
</picture>
登录后复制

处理大图像

如果我们作为开发人员避免完美地调整图片大小和转换图片,我们就不能指望普通管理员或客户能够做到这一点。因此,我们让人们上传他们想要的内容,然后我们对其进行处理(良好的用户体验和客户关系)。

最初,我们没想到调整大小会如此频繁,因此我们几次完全终止了演示服务器。所以我们开发了这种方法:

  • 我们在专用于图像处理的独立低端 VPS 上构建了一个简单的 API 服务。
  • 我们的制作服务器将图像和所需的格式/尺寸发送到此服务。
  • 处理后的图像被返回并存储以供服务。

结果

  • 用户很高兴:图像加载速度快,并且在任何设备上看起来都很棒。
  • 管理员很高兴:他们不必担心在上传之前调整图像大小或优化图像。
  • 开发人员很高兴:该过程是自动化的,不需要额外的工作。
  • 服务器很高兴:减少了服务图片的带宽消耗和 CPU 负载。

我知道我们可以使用任何公共商业服务来调整图片大小,但说实话,这是一个下午的工作(意思 - 更便宜),我们已经控制了所有方面。

我们是否将其商业化发布?

我们对此解决方案非常满意,因此我们正在考虑完善此调整大小和转换服务并使其可供您使用。这样的服务有兴趣吗?让我知道。也许我们可以削减很多。

对于开发者,由开发者 - 在这一点上可能是一个模因,但在这种情况下是残酷的事实。

代码(简化)

我无法分享调整大小的方面,但我可以向您展示选择和创建。我们使用 PHP 工作,这就是我们的工作方式。

生成元素

<picture>
  <source srcset="/Upload/2024/03/11/tn-w200-frantisek.webp 1x,
                   /Upload/2024/03/11/tn-w300-frantisek.webp 1.5x,
                   /Upload/2024/03/11/tn-w400-frantisek.webp 2x,
                   /Upload/2024/03/11/tn-w600-frantisek.webp 3x">
  <img src="/Upload/2024/03/11/frantisek.jpg" width="2222" height="2963" loading="lazy" alt="Video poster">
</picture>
登录后复制

我们使用自定义模板系统,其中 HTML 与 PHP 混合(我知道这并不常见,但它最适合我们的需求)。

<div>



<p>这段代码展示了一个逻辑。我们实际上做的是我们有一个文件及其变体的数据库,因此我们使用数组和对象而不是路径。但是,正如我所说,这完美地展示了我们所做工作的逻辑。</p>

<p>正如你所看到的,如果前端开发人员编写了这段代码或 <img  alt="Web 图像:完美(自动)调整大小和转换" >;标签,谁关心花费的时间。</p>

<h2>
  
  
  让我们指出问题
</h2>

<p>此方法的构建不会在现实世界中引起任何问题。但它有两个需要改进的地方,我迫不及待地想确定(再次,只是出于完美主义者的角度)。</p>

<ol>
<li>
<p><strong>双重排队</strong></p>

<p>在前端首次加载该图像后,它会排队等待调整大小。如果网站流量大的话,其实可以排队两次。在现实世界中使用 - 没问题;所以它处理两次。这种情况在高流量网站上一年只发生两次。</p>
</li>
<li>
<p><strong>大图初始显示</strong></p>

<p>如果管理员上传大图片,则需要 5-10 分钟来调整大小和转换,因为这是在计划任务中进行的。同时,大图片也显示在他们的网页上。在实际使用中 - 通常只有管理员才能看到它,因为新内容在用户访问之前通常需要一些时间。在高流量网站上,我们将此计时器缩短至 1 分钟,因此这不是问题。</p>
</li>
</ol>

<h2>
  
  
  存储注意事项
</h2>

<p>您可能会指出,现在我们有各种尺寸和格式的多个图像,这可能会占用大量存储空间。如果您的网站充满了图片和画廊,并且您需要每个图片和画廊的缩略图和详细图像,是的,它将使用大量存储空间。</p>

<p>但磁盘空间是当今最便宜的组件。性能和用户体验方面的好处通常远远超过成本。这样,您就降低了 CPU 和整个基础设施的负载。</p>
<p><strong>旁注 -</strong> 为什么关心基础设施?其他人正在处理这个问题,对吗?这是我经常听到的。简单的事实是,这不是真的。如果托管公司由于负载增加而没有更多客户而必须添加硬件以获得更高的带宽,他们将无法维持下去,并会很乐意将这些成本转嫁给服务器租用者。</p>

<h2>
  
  
  我们的实际结果和经验
</h2>

<p>在 Google Search Console 中,Core Web Vitals 比以往任何时候都更加环保,加载时间通常要短得多,并且访问者会话时间更长(几个百分点,但我会接受!)。开发人员或管理员不需要额外的工作 - 一切都很顺利。</p>

<p>我强烈建议每个开发者都使用这样的东西。它为我们做了很多事情,而我们实际上可能会忘记这个东西在后台存在并完成它的工作。事实上,我写这篇文章的时间比设置和完善所有系统的时间还要长。</p>

<h2>
  
  
  结论
</h2>

<p>通过自动化图像优化,我们实现了:</p>

<ul>
<li>针对每个设备量身定制的完美图像交付。</li>
<li>改进了页面加载时间和用户体验。</li>
<li>减少开发人员的手动工作。</li>
</ul>

<p>如果您厌倦了图像优化的繁琐工作,请考虑自动化该过程。这对每个参与者来说都是双赢的。</p>

<p><strong>你的图像使用了一些系统性的解决方案吗?</strong></p>

<p><strong>还是手动转换它们?</strong></p>

<p><strong>您尝试过 AVIF 吗?它们对较大图像有惊人的好处。</strong></p>


          </div>

            
        
登录后复制

以上是Web 图像:完美(自动)调整大小和转换的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1665
14
CakePHP 教程
1424
52
Laravel 教程
1322
25
PHP教程
1270
29
C# 教程
1250
24
说明PHP中的安全密码散列(例如,password_hash,password_verify)。为什么不使用MD5或SHA1? 说明PHP中的安全密码散列(例如,password_hash,password_verify)。为什么不使用MD5或SHA1? Apr 17, 2025 am 12:06 AM

在PHP中,应使用password_hash和password_verify函数实现安全的密码哈希处理,不应使用MD5或SHA1。1)password_hash生成包含盐值的哈希,增强安全性。2)password_verify验证密码,通过比较哈希值确保安全。3)MD5和SHA1易受攻击且缺乏盐值,不适合现代密码安全。

PHP和Python:比较两种流行的编程语言 PHP和Python:比较两种流行的编程语言 Apr 14, 2025 am 12:13 AM

PHP和Python各有优势,选择依据项目需求。1.PHP适合web开发,尤其快速开发和维护网站。2.Python适用于数据科学、机器学习和人工智能,语法简洁,适合初学者。

PHP行动:现实世界中的示例和应用程序 PHP行动:现实世界中的示例和应用程序 Apr 14, 2025 am 12:19 AM

PHP在电子商务、内容管理系统和API开发中广泛应用。1)电子商务:用于购物车功能和支付处理。2)内容管理系统:用于动态内容生成和用户管理。3)API开发:用于RESTfulAPI开发和API安全性。通过性能优化和最佳实践,PHP应用的效率和可维护性得以提升。

PHP:网络开发的关键语言 PHP:网络开发的关键语言 Apr 13, 2025 am 12:08 AM

PHP是一种广泛应用于服务器端的脚本语言,特别适合web开发。1.PHP可以嵌入HTML,处理HTTP请求和响应,支持多种数据库。2.PHP用于生成动态网页内容,处理表单数据,访问数据库等,具有强大的社区支持和开源资源。3.PHP是解释型语言,执行过程包括词法分析、语法分析、编译和执行。4.PHP可以与MySQL结合用于用户注册系统等高级应用。5.调试PHP时,可使用error_reporting()和var_dump()等函数。6.优化PHP代码可通过缓存机制、优化数据库查询和使用内置函数。7

PHP的持久相关性:它还活着吗? PHP的持久相关性:它还活着吗? Apr 14, 2025 am 12:12 AM

PHP仍然具有活力,其在现代编程领域中依然占据重要地位。1)PHP的简单易学和强大社区支持使其在Web开发中广泛应用;2)其灵活性和稳定性使其在处理Web表单、数据库操作和文件处理等方面表现出色;3)PHP不断进化和优化,适用于初学者和经验丰富的开发者。

PHP类型提示如何起作用,包括标量类型,返回类型,联合类型和无效类型? PHP类型提示如何起作用,包括标量类型,返回类型,联合类型和无效类型? Apr 17, 2025 am 12:25 AM

PHP类型提示提升代码质量和可读性。1)标量类型提示:自PHP7.0起,允许在函数参数中指定基本数据类型,如int、float等。2)返回类型提示:确保函数返回值类型的一致性。3)联合类型提示:自PHP8.0起,允许在函数参数或返回值中指定多个类型。4)可空类型提示:允许包含null值,处理可能返回空值的函数。

PHP和Python:代码示例和比较 PHP和Python:代码示例和比较 Apr 15, 2025 am 12:07 AM

PHP和Python各有优劣,选择取决于项目需求和个人偏好。1.PHP适合快速开发和维护大型Web应用。2.Python在数据科学和机器学习领域占据主导地位。

PHP与其他语言:比较 PHP与其他语言:比较 Apr 13, 2025 am 12:19 AM

PHP适合web开发,特别是在快速开发和处理动态内容方面表现出色,但不擅长数据科学和企业级应用。与Python相比,PHP在web开发中更具优势,但在数据科学领域不如Python;与Java相比,PHP在企业级应用中表现较差,但在web开发中更灵活;与JavaScript相比,PHP在后端开发中更简洁,但在前端开发中不如JavaScript。

See all articles