@bb-studio/exr

中文文档
0.2.0发布于 2026/09/20MITTypeScriptESM + CJS近 30 天下载 4647

OpenEXR 扫描线解析器/解码器/编码器以及浏览器和节点的后端中性 RGBA 帮助器

中文使用文档
文档目录7 节
  1. 安装
  2. 图像 API
  3. 核心 API
  4. 浏览器工作助手
  5. 错误/诊断
  6. 写入支持
  7. 许可证

翻译:

npm version GitHub Pages GitHub

OpenEXR 扫描线 parser/decoder/encoder和后端中立的RGBA帮助器,用于浏览器和节点.js.

安装

npm install @bb-studio/exr

图像 API

import { decodeExrRgba, encodeExrRgba, inspectExrImage } from '@bb-studio/exr';

const info = inspectExrImage(buffer);
const image = decodeExrRgba(buffer);
const encodedImage = encodeExrRgba(
  { width: image.width, height: image.height, rgba: image.rgba },
  { precision: 'half', includeAlpha: true },
);

decodeExrRgba 选择请求的部分,或带有数据窗口的第一部分,扩展被采样的通道,并解决常规的RGB/A名称,包括层后缀和Y/luma倒置. 结果保留了数据/播放窗口,频道描述符,以及部分属性.

encodeExrRgba 接受直线 Float32Array RGBA像素外加可选的命名通道,打出属性,压缩,以及非零数据/播放窗口. 它返回EXR字节,没有 Blob,渲染器,或平台依赖性.

核心 API

import { parseExr, decodeExrPart, readExr, writeExr } from '@bb-studio/exr';

const buffer = await fetch('/image.exr').then((r) => r.arrayBuffer());
const structure = parseExr(buffer);
const decoded = decodeExrPart(buffer, structure, { partId: structure.parts[0].id });

// Convenience parse+decode in one call
const result = readExr(buffer);

// Encode scanline EXR
const encoded = writeExr({
  parts: [
    {
      compression: 3, // ZIP
      dataWindow: { xMin: 0, yMin: 0, xMax: 1, yMax: 1 },
      channels: [{ name: 'R', pixelType: 2, data: new Float32Array([0, 1, 2, 3]) }],
    },
  ],
});

每一部分也可提供类型 string, (中文(简体) ), int, (中文(简体) ), float,或 chromaticities 属性 :

const attributes = {
  ocioColorSpace: { type: 'string', value: 'ACEScg' },
  chromaticities: {
    type: 'chromaticities',
    value: {
      redX: 0.713,
      redY: 0.293,
      greenX: 0.165,
      greenY: 0.83,
      blueX: 0.128,
      blueY: 0.044,
      whiteX: 0.32168,
      whiteY: 0.33767,
    },
  },
} as const;

decodeExrPart 返回带有采样元数据的有样本的内源信道平面。 仅仅实现 具体物理渠道,通过确切姓名 channelNames数字 :

const depth = decodeExrPart(buffer, structure, {
  partId: structure.parts[0].id,
  channelNames: ['depth.Z'],
});

由于 OpenEXR 压缩基于块, 解码器仍然解压缩每个需要的扫描线块, 但是 它只为选定的信道分配和转换样机。 未选中的频道字节被跳过 同时保留其物理行布局。 未知请求名称失败 CHANNEL_NOT_FOUND。 。 。 . 工人协助 decodeExrPartWithWorkers API接受相同的选择.

浏览器工作助手

import { decodeExrPartWithWorkers, expandDecodedPartChannels } from '@bb-studio/exr/browser';
  • decodeExrPartWithWorkers 可选预解码 ZIP/DWA 块使用工人.
  • decodeExrRgbaWithWorkers 通过工人辅助路径应用相同的 RGBA 语义.
  • expandDecodedPartChannels 可从根包中获取,目前仍可在此再出口给现有的浏览器消费者.

错误/诊断

  • 通过输入失败 ExrError 财务报告和审定财务报表 ExrErrorCode。 。 。 .
  • 通过 onEvent 回调( n)ExrEvent, (中文(简体) ), ExrEventCode) (中文(简体) ).

写入支持

  • 扫描线单段和多段写作.
  • 压缩 : NO_COMPRESSION, (中文(简体) ), RLE_COMPRESSION, (中文(简体) ), ZIPS_COMPRESSION, (中文(简体) ), ZIP_COMPRESSION, (中文(简体) ), PIZ_COMPRESSION, (中文(简体) ), PXR24_COMPRESSION, (中文(简体) ), B44_COMPRESSION, (中文(简体) ), B44A_COMPRESSION。 。 。 .
  • 像素类型 : UINT, (中文(简体) ), HALF, (中文(简体) ), FLOAT。 。 。 .

许可证

版本与发布记录

@bb-studio/exr 共发布 5 个版本,首次发布于 2026/03/14;过去 12 个月发布了 5 个版本。

版本发布日期距今
0.2.0latest2026/09/201 个月前
0.1.32026/08/302 个月前
0.1.22026/06/284 个月前
0.1.12026/03/147 个月前
0.1.02026/03/147 个月前

关于 @bb-studio/exr 的常见问题

@bb-studio/exr 是什么?

OpenEXR 扫描线解析器/解码器/编码器以及浏览器和节点的后端中性 RGBA 帮助器

如何安装 @bb-studio/exr?

在项目目录运行 npm install @bb-studio/exr,或使用 pnpm add / yarn add / bun add。

@bb-studio/exr 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@bb-studio/exr 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@bb-studio/exr 可以商用吗?

@bb-studio/exr 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@bb-studio/exr 的下载量有多少?

根据 npm 官方下载统计,@bb-studio/exr 在 2026/10/08 – 2026/11/06 这 30 天内被下载 4,647 次,日均约 155 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@bb-studio/exr 还在维护吗?

最新版本 0.2.0 发布于 2026/09/20(1 个月前);至今共发布 5 个版本,其中过去 12 个月发布了 5 个;首次发布于 2026/03/14。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。