Skip to main content
Bun.Image 是一个可链式调用的图像管线,用于解码、调整大小、旋转和重新编码 JPEG、PNG、WebP、HEIC 和 AVIF — 基于 libjpeg-turbo、spng、libwebp 和 SIMD 几何内核,无 npm 依赖,无原生插件构建步骤。
API 设计仿照 Sharp:从输入构建,链式调用转换,选择输出格式,然后 await 一个终端方法。在终端方法被 await 之前不会执行任何工作,并且工作在线程外运行。

输入

构造函数接受路径、字节或 Blob — 包括 Bun.file()Bun.s3.file()Blob#image()new Bun.Image(blob) 的简写:
格式从字节中嗅探 — 扩展名和 Content-Type 被忽略。 路径字符串是文件系统路径。 不要直接将用户控制的字符串传递给构造函数 — 那是任意文件读取的原语。将不受信任的输入读取到 Buffer 中(使用 fetchBun.file 和您自己的验证)然后传递字节。 当传递 TypedArray/ArrayBuffer 时,不要在终端操作挂起时对其进行变异 — 解码在线程外运行并借用字节。SharedArrayBuffer 和可调整大小的缓冲区会被拒绝;使用 buf.slice() 传递固定视图。 第二个 options 参数用于防止解压炸弹并控制 EXIF 处理:

元数据

无需解码像素数据即可读取 widthheightformat

调整大小

filter 选择重采样内核。默认的 "lanczos3" 是照片的正确选择。 当源文件是 JPEG 且目标大小不超过源文件一半时,解码会直接跳到最近的 M/8 IDCT 缩放,因此从 24 MP 照片生成缩略图永远不会创建全分辨率缓冲区。

旋转 · 翻转

调制

输出格式

调用格式方法设置编码目标;如果没有设置,则复用源格式。
palette: true 将图像量化到 ≤256 色调色板,并输出索引(颜色类型 3)PNG,可选 Floyd–Steinberg dither。对于截图和 UI 资源,这通常比真彩色小 3–5 倍。

终端方法

管线在 await 以下方法之一之前不会执行任何工作:
.write() 接受与 Bun.write 相同的目的地 — 路径字符串、Bun.file()Bun.s3.file() 或 fd。如果您没有链式调用格式方法,并且目的地是路径字符串,则扩展名决定格式(.jpg/.png/.webp/.heic/.avif)。

占位符

对于在真实图片加载之前嵌入 HTML 的低质量占位符,.placeholder() 返回一个 ThumbHash 渲染的 ≤32px 模糊 data: URL — 大约 400–700 字节,无需客户端解码器:
对于图像本身的由粗到细渲染,编码为渐进 JPEG:
第一个终端方法 resolve 后,img.widthimg.height 反映输出尺寸(在此之前为 -1)。

Bun.serve 集成

Bun.Image 管线是有效的 Response 主体,并自动设置 Content-Type。要在服务器处理器中将编码保持在线程外,首先 await 一个终端方法:
直接传递管线(new Response(img))也可以,但会在主体初始化期间同步运行编码。

剪贴板

fromClipboard() 从 macOS 和 Windows 的系统粘贴板读取 PNG、TIFF、HEIC、JPEG、WebP、GIF 或 BMP;常规解码管线会接管后续处理。如果没有图像则返回 null,在 Linux 上始终返回 null — 自行调用 wl-paste/xclip 并将字节传递给构造函数。 对于”图像在剪贴板,按 ⌘V”的被动提示,轮询 clipboardChangeCount()(单次整数读取)并在其变化时调用 hasClipboardImage();macOS 没有剪贴板变化通知,因此这是文档化的模式。

平台后端

¹ Windows 需要来自 Microsoft Store 的 HEIF Image Extensions / AV1 Video Extension。 ² AVIF 编码 需要操作系统的 AV1 编码器 — 仅 Apple Silicon M3+。Intel Mac 和 M1/M2 会拒绝并返回 ERR_IMAGE_FORMAT_UNSUPPORTED;AVIF 解码 在 ImageIO 支持的任何地方都可以工作(macOS 13+)。 当系统后端的格式在当前机器上不可用时,终端方法会 reject 并返回 error.code === "ERR_IMAGE_FORMAT_UNSUPPORTED" — 在此条件分支上回退到可移植格式:
由系统后端处理的格式(TIFF、HEIC、AVIF、剪贴板)继承操作系统的补丁级别 — 请保持 macOS / Windows 更新。JPEG、PNG 和 WebP 在所有平台上都经过相同的静态链接编解码器,因此编码输出在 Linux、macOS 和 Windows 上字节相同。要强制几何操作也使用可移植的 Highway 路径(例如用于金图测试),请设置进程级后端: