翻译:
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。 。 。 .
许可证
- 包许可证:麻省理工学院(
LICENSE(中文(简体) ) - 第三方依赖性通知:
THIRD_PARTY_LICENSES.md