6 个稳定版本
2.3.1 | 2023年11月14日 |
---|---|
2.3.0 | 2023年9月8日 |
2.2.0 | 2022年10月12日 |
2.1.0 | 2021年10月7日 |
1.18.0 | 2020年3月20日 |
#350 in 图像
每月 590 次下载
用于 mozjpeg-sys
80KB
2K SLoC
扫描偏移量
用于 HTTP/2 并行渐进式流和 HTTP/3 优先级功能的渐进式图像解析器。
计算 cf-priority-change
和 Priority
标头的最佳偏移量,以实现具有“预览”和“足够好”阶段的渐进式图像渲染。在 JPEG 中,它尝试仅渲染 DC 通道(libjpeg-turbo 对仅 DC 阶段有特殊支持,以实现更好的模糊效果),然后优先发送足够的数据以使图像看起来完全加载。
对于 GIF 动画,它优先发送第一帧。在交错 PNG 中,它大致猜测渐进式扫描。对于非渐进式图像,它尝试在发送任何其他数据之前发送图像尺寸,以帮助页面布局并(改进累积布局位移(CLS)指标)。
构建和使用
安装 Rust 1.60 或更高版本,并运行
cargo install cloudflare-soos
soos-cf-priority image.jpg [--rfc9218]
这将输出到标准输出(stdout)Cloudflare的cf-priority
(第一行)和cf-priority-change
(第二行)头信息,并为image.jpg
文件设置断点,错误输出到标准错误(stderr)。当提供--rfc9218
参数时,将输出HTTP3 priority
头信息,例如:u=1;i=?0,change=(1000;u=3;i=?0 10000;u=5;i 100000;u=6;i)
。如果未指定路径,则从标准输入(stdin)读取图片。此工具需要渐进式JPEG文件,对于基线JPEG或其他格式不执行任何操作。
可以通过使用此crate作为库并以编程方式执行相同操作,调用soos::Scans::from_file(jpeg_bytes)?.cf_priority_change_headers()?
或soos::Scans::from_file(jpeg_bytes)?.rfc9218_priority_change_headers()?
(为rfc9218(h3)优先级头信息)。
您还可以使用rustup target add wasm32-unknown-unknown; cargo build --release --target=wasm32-unknown-unknown
为WASM构建,或者使用wasm-pack。
示例工具
cargo run --example cf-priority -- image.jpg
cargo run --example rfc9218-priority -- image.jpg
cargo run --example scan -- image.jpg
这些工具显示了用于生成HTTP优先级头的调试信息。
鸣谢
JPEG解析基于Ulf Nilsson的jpeg-decoder。GIF解析来自Piston GIF crate。
依赖关系
~0–470KB