WebP Cloud Services Blog

还在为了不同分辨率的设备手动生成小图?WebP Cloud Services 上线 Adaptive Resize 功能

· Nova Kwok

用过 Wordpress 的同学肯定知道,Wordpress 为了优化图片在不同分辨率设备下的访问效果,会将上传的图片进行后台处理,变成多个不同尺寸的图片,比如,我们的 Wordpress 演示站 上有这么一张图片:

我们上传的时候图片的 URL 是: https://wordpress.webp.se/wp-content/uploads/2023/06/DSC7224.jpg ,这张图片的分辨率是 3200px*2133px,文件体积 4.4MB。

Wordpress 在后台帮我们转换成了好几张图片:

从 Wordpress 的后台可以直接看到这些文件:

 ls -lh | grep 7224
-rw-r--r-- 1 www-data www-data 126K Jun 28  2023 DSC7224-1024x683.jpg
-rw-r--r-- 1 www-data www-data  22K Jun 28  2023 DSC7224-150x150.jpg
-rw-r--r-- 1 www-data www-data 224K Jun 28  2023 DSC7224-1536x1024.jpg
-rw-r--r-- 1 www-data www-data 363K Jun 28  2023 DSC7224-2048x1365.jpg
-rw-r--r-- 1 www-data www-data  31K Jun 28  2023 DSC7224-300x200.jpg
-rw-r--r-- 1 www-data www-data  86K Jun 28  2023 DSC7224-768x512.jpg
-rw-r--r-- 1 www-data www-data 4.3M Jun 28  2023 DSC7224.jpg
-rw-r--r-- 1 www-data www-data 556K Jun 28  2023 DSC7224-scaled.jpg

Wordpress 会在实际展示的时候通过 src-set 等方式给不同分辨率的设备展示不同的图片,类似这样:

<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="683"
        src="https://wordpress.webp.se/wp-content/uploads/2023/06/DSC6975-1024x683.jpg" alt="" class="wp-image-14"
        srcset="https://wordpress.webp.se/wp-content/uploads/2023/06/DSC6975-1024x683.jpg 1024w, https://wordpress.webp.se/wp-content/uploads/2023/06/DSC6975-300x200.jpg 300w, https://wordpress.webp.se/wp-content/uploads/2023/06/DSC6975-768x512.jpg 768w, https://wordpress.webp.se/wp-content/uploads/2023/06/DSC6975-1536x1024.jpg 1536w, https://wordpress.webp.se/wp-content/uploads/2023/06/DSC6975-2048x1365.jpg 2048w"
        sizes="(max-width: 1024px) 100vw, 1024px"></figure>

这样的好处非常明显:不同的分辨率的设备可以直接使用处理好的图片,例如给一个手机用户展示 4.4M 的原图显然没有必要,不仅加载速度慢还会浪费流量。

但坏处也挺明显,用户本地会保存多个尺寸的图片,对于 Wordpress 这种 Fully managed 的方案可能还好(虽然每个图片都会产生大约额外 7 个小文件,迁移时会有 7 倍的小文件 IO),如果不是 Wordpress 的场景的话,手动 resize 图片且保存这些不同尺寸的图片,并且在 HTML 上加入 CSS 为不同的用户渲染不同的图片显然不是一个非常轻松的事情。

那这里我们设想一个场景,你和我一样是个“摄影爱好者”,有个自己的网站对外展示了拍摄的图片,为了方便管理,照片原图全部放在了 AWS S3/Cloudflare R2 上,每个 Album 一个目录,网站每个 Album 页面的 thumbnail 图片使用了 WebP Cloud 上的 ?width=300 之类的参数渲染缩略图。

那每个 Album 内部的照片应该如何展示?直接给用户展示原图显然不科学,普遍相机拍摄的照片都在 4000x4000px 以上,所以这里我们需要一个比较方便的可以针对不同尺寸设备自动 resize 的功能,正好,我们最近上线了一个新功能——Adaptive Resize 可以做到这一点。

在 Dashboard 中,每个 Proxy 都提供了一个 Adaptive Resize 的功能,目前用户可以配置两类(桌面端和移动端)设备的最大分辨率,默认值为桌面端 1600px,移动端 800px。

在配置完成并启动了这个功能后,我们会根据访客的 User Agent 判断是桌面端设备还是移动端设备,并对于网站上任何宽度大于对应设备环境设定值的图片,会被自动等比例 resize 到设定宽度,从而进一步减小图片的体积,加快渲染速度。

当然,如果你需要其他不同尺寸的图片的话,依然可以参考我们 Image Resize 功能,通过在图片后面加入 ?width=100 类似的参数来获得不同尺寸的图片,这个参数优先级会高于 Adaptive Resize (但如果这里参数的尺寸大于 Adaptive Resize 的尺寸的话,会以 Adaptive Resize 尺寸为准)

例如,一张图片的尺寸是 4000x4000px,Adaptive Resize 设定了桌面端是 2000px,那如果请求的路径是 http://path/to/image.jpg?width=3000 的话,依然会输出一张 2000x4000px 的图片

和往常我们添加的新功能一样,WebP Cloud 一直坚信所有用户应该获得同等的使用权利。因此无论你是付费用户还是免费用户,Adaptive Resize 功能均可无限使用且没有额外费用,欢迎来尝鲜!(以及汇报可能的 Bug 😇)


WebP Cloud Services 团队是一个来自上海和赫尔辛堡的三人小团队,由于我们不融资,且没有盈利压力 ,所以我们会坚持做我们认为正确的事情,力求在我们的资源和能力允许范围内尽量把事情做到最好, 同时也会在不影响对外提供的服务的情况下整更多的活,并在我们产品上实践各种新奇的东西。

如果你觉得我们的这个服务有意思或者对我们服务感兴趣,欢迎登录 WebP Cloud Dashboard 来体验,如果你好奇它还有哪些神奇的功能,可以来看看我们的文档 WebP Cloud Services Docs,希望大家玩的开心~


Discuss on Hacker News