订阅以接收新文章的通知:

Cloudflare Images 推出 AVIF、Blur 和 Bundle with Stream

2021/11/18

8 分钟阅读时间
Store, resize and deliver images with Cloudflare Images

两个月前,我们全面推出了 Cloudflare Images,采用情况和我们收到的反馈令人感到惊讶。

让我们先看一些数据:

在 11 月 5 日至 12 日这一周内,平均每天传送了超过 7000 万张图像。

至今为止上传了超过 150 万张图像,且上传数量每天都在增加。

但我们才刚刚开始,且很开心地宣布推出大家最为渴望的功能。首先我们将谈论对 Images 的 AVIF 支持,使用 AVIF 转换尽可能多的图像,从而在不影响质量的情况下生成高度压缩、快速交付的图像。

其次,我们引入了“模糊”。通过模糊图像,并结合原本已经支持的通过签名 URL 保护私人图像的功能,Cloudflare Images 已成功提供付费内容预览的最佳解决方案。

对于许多客户来说,能够从他们自己的域而不是仅通过 imagedelivery.net 来服务 Images 十分重要。下面,我们将展示使用自定义 Worker 或特殊 URL 实现此目的的一个简单解决方案。

最后一件同样重要的事情是,我们宣布为 Cloudflare Images 和 Stream 推出有吸引力的新价格套餐

Images 支持 AVIF

去年,我们已经宣布在 Image Resizing 产品中支持新的 AVIF 图像格式。

上个月,我们在 Cloudflare Images 中添加了 AVIF 支持。它压缩图像的效果比 WebP 和 JPEG 之类的旧版格式要好得多。如今,Chrome 和 Firefox 中都已支持 AVIF 图像格式。在全球范围内,将近 70% 的用户拥有支持 AVIF 的 Web 浏览器。

AVIF 是什么

正如我们之前所解释的那样,AVIF 是 HEIF ISO 标准以及 Mozilla、Xiph、Google、Cisco 和许多其他公司的免版税 AV1 编码解码器的组合。

“目前,JPEG 是 Web 上最常用的图像格式。就它的使用时长而言,它做得非常好,而且由于其出色的兼容性,它在未来几年内极有可能保持常用。在取代 JPEG 方面曾做过许多尝试,例如 JPEG 2000、JPEG XR 和 WebP。然而,这些格式仅提供少量的压缩改进,且在图像质量上始终比不上 JPEG。AVIF 的压缩和图像质量都远远高于所有这些格式。”1

Cloudflare Images 如何支持 AVIF

提醒一下,图像交付通过 Cloudflare 管理的 imagedelivery.net 域来完成。它由 Cloudflare Workers 提供支持。我们使用以下逻辑来请求基于 Accept HTTP 请求标头的 AVIF 格式:

const WEBP_ACCEPT_HEADER = /image\/webp/i;
const AVIF_ACCEPT_HEADER = /image\/avif/i;

addEventListener("fetch", (event) => {
  event.respondWith(handleRequest(event));
});

async function handleRequest(event) {
  const request = event.request;
  const url = new URL(request.url);
  
  const headers = new Headers(request.headers);

  const accept = headers.get("accept");

  let format = undefined;

  if (WEBP_ACCEPT_HEADER.test(accept)) {
    format = "webp";
  }

  if (AVIF_ACCEPT_HEADER.test(accept)) {
    format = "avif";
  }

  const resizingReq = new Request(url, {
    headers,
    cf: {
      image: { ..., format },
    },
  });

  return fetch(resizingReq);
}

基于 Accept 标头,Worker 中的逻辑会检测是否可提供 WebP 或 AVIF 格式。请求会传递到 Image Resizing。如果图像在 Cloudflare 缓存中可用,则会立即提供图像,否则会重新调整图像大小、转换图像并缓存。此方法可确保为不支持 AVIF 格式的客户端提供 WebP 或 JPEG 格式的图像。

Cloudflare Images 产品的好处是,我们添加了 AVIF 支持,而客户方无需更改哪怕一行代码。

将图像转换为 AVIF 是计算密集型,但在文件大小方面会带来显著的好处。在决定提供哪种格式时,我们始终会权衡成本和利益。

值得注意的是,目前所有的 WebP 和 AVIF 格式转换都在图像交付的请求阶段发生。未来我们将添加在上传阶段转换图像的功能。

引入模糊

对于 Images 和 Image Resizing,呼声最高的一个功能就是添加模糊支持。我们最近通过 URL 格式 Cloudflare Workers 添加了模糊支持。

Cloudflare Images 使用变体。当您创建一个变体时,您可以定义属性,包括变体名称、宽度、高度以及该变体是否可公开访问。模糊将通过 variant API 作为变体的新选项提供:

curl -X POST "https://api.cloudflare.com/client/v4/accounts/9a7806061c88ada191ed06f989cc3dac/images/v1/variants" \
     -H "Authorization: Bearer <api_token>" \
     -H "Content-Type: application/json" \
     --data '{"id":"blur","options":{"metadata":"none","blur":20},"neverRequireSignedURLs":true}'

在 Cloudflare Images 中使用模糊功能的一个使用案例是控制对高级内容的访问。

客户将上传需要访问令牌的图像:

curl -X POST "https://api.cloudflare.com/client/v4/accounts/9a7806061c88ada191ed06f989cc3dac/images/v1" \
     -H "Authorization: Bearer <api_token>"
     --form 'file=@./<file_name>' \
     --form 'requireSignedURLs=true'

使用我们通过 API 定义的变体,我们可以提取图像而无需提供签名:

Blurred example picture of lava lamps

要访问受保护的图像,将需要有效的签名 URL

Unblurred example picture of lava lamps Cloudflare 大厅中的熔岩灯。由 @mahtin 免费提供

图像模糊和限制访问图像的组合可以集成到许多场景中,为内容发布者提供强大的工具集。

Cloudflare 仪表板中很快将提供定义变体的功能和模糊选项。

从自定义域提供图像

Cloudflare Images 客户的一个重要使用案例是从自定义域提供图像。它可以改善延迟和加载性能,而无需在客户端进行额外的 TLS 协商。使用 Cloudflare Workers,客户可以根据以下示例立即添加此功能:

const IMAGE_DELIVERY_HOST = "https://imagedelivery.net";

addEventListener("fetch", async (event) => {
  event.respondWith(handleRequest(event.request));
});

async function handleRequest(request) {
  const url = new URL(request.url);
  const { pathname, search } = url;

  const destinationURL = IMAGE_DELIVERY_HOST + pathname + search;
  return fetch(new Request(destinationURL));
}

为简单起见,Workers 脚本从其部署的域重定向到 imagedelivery.net。我们假设格式与用于 Cloudflare Images URL 的格式相同:

https://<customdomain.net>/<encoded account id>/<image id>/<variant name>

可以调整 Worker 以满足客户需求,例如:

  • 从特定的域路径提供图像(如/images/)
  • 自动填入帐户 ID 或变体名称
  • 将 Cloudflare Images 完全映射到自定义 URL

对于仅想要在 Cloudflare 上从他们的域提供 Cloudflare Images 的客户,我们将添加使用以下格式提供 Cloudflare Images 的功能:

https://<customdomain.net>/cdn-cgi/imagedelivery/<encrypted_account_id>/<_image_id>/<variant_name>

对于激活 Cloudflare Images 订阅的 Cloudflare 帐户,其下所有客户域都将支持图像交付。此功能将在假日之前对所有 Cloudflare Images 客户可用。

Images 和 Stream 捆绑

Creator 平台、电子商务和许多其他产品都有一个共同之处:拥有简单且可访问的方式,以最佳且最实惠的方式上传、存储和交付图像和视频是至关重要的。

我们与 Stream 团队合作,创建一组捆绑包,让客户可超级轻松地开始使用您的产品。

Starter 捆绑包是完美的试验品,也是第一个 MVP。每个月仅需 $10,比未捆绑的选项便宜 50%,同时包含足以入门的使用量:

  • Stream:可存储 1,000 分钟并提供 5,000 分钟
  • Images:可存储 100,000 张图像,并提供 500,000 张图像

对于更大且快速扩展的应用程序,我们提供 $50 一个月的 Creator 捆绑包,相比未捆绑的产品可节省超过 60%。它包括开始扩展所需的全部内容:

  • Stream:可存储 10,000 分钟并提供 50,000 分钟
  • Images:可存储 500,000 张图像,并提供 1,000,000 张图像
Screenshot of the bundle selection UI, mentioning the price and what's included

这些新捆绑包将从 11 月底向所有客户提供。

下一步

我们不会止步于此,接下来将为 Images 推出的功能已经在准备之中。其中一个就是 Images Analytics。拥有卓越的分析对产品十分关键,因此我们将为 Cloudflare Images 的所有客户引入分析功能,以便保持跟踪所有图像和使用情况。


1/generate-avif-images-with-image-resizing/#what-is-avif

我们保护整个企业网络,帮助客户高效构建互联网规模的应用程序,加速任何网站或互联网应用程序抵御 DDoS 攻击,防止黑客入侵,并能协助您实现 Zero Trust 的过程

从任何设备访问 1.1.1.1,以开始使用我们的免费应用程序,帮助您更快、更安全地访问互联网。要进一步了解我们帮助构建更美好互联网的使命,请从这里开始。如果您正在寻找新的职业方向,请查看我们的空缺职位
Full Stack Week (CN)简体中文Product News (CN)Speed Week (CN)

在 X 上关注

Marc Lamik|@marclamik
Cloudflare|@cloudflare

相关帖子

2021年12月19日 13:59

在 Cloudflare 上构建您的下一个视频应用程序

过去,构建视频应用程序十分困难。在录制、编码和播放视频背后有许多复杂的技术。幸运的是,Cloudflare Stream 分担走了所有困难的部分,现在您可以轻松构建自定义视频和流媒体应用程序。让我们看一下,我们可以如何结合 Cloudflare Stream、Access、Pages 和 Workers,使用极少的代码创建一个高性能的视频应用程序。...

2021年11月20日 13:59

网络性能更新:Full Stack Week

两个多月前,我们分享了全球最后一英里网络的广泛基准测试结果。结果显示,基于一系列的测试(TCP 连接时间、接收第一个字节的时间、接收最后一个字节的时间)和一系列测量值(平均值为 p95),Cloudflare 是全球 49% 的网络中最快的提供商。从那时起,我们一直在不断努力...

2021年11月19日 14:05

喜大普奔:Cloudflare Workers 提供对 Stripe JavaScript SDK 原生支持

在应用中处理支付是建立在线业务的关键。对于许多开发者来说,处理支付的主要选择是 Stripe。自从大约七年前我第一次接触 Stripe 以来,这项服务的发展已经远远超出了简单的支付处理。在我去年分享的电子商务示例应用程序中,Stripe使用 Connect 产品管理了一个完整的卖家市场。对于那些不满足于接受支付功能的开发者来说,Stripe 的产品套件非常适用。...