@ colorhythm/ libraw-wasm (英语)
脚本绑定 立方圆形编译为 WebAssembly 用于浏览器和节点.js相机-raw解码. 色彩韵律维护 用于需要直接、面向分析的应用程序的分叉 传感器数据——不仅仅是一个渲染的RGB图像.
包裹故意为低等. 它可以暴露存储的传感器缓冲器, 可见图像几何、彩色过滤事实、相机特征、黑色和 饱和水平、嵌入式元数据、缩略图和LibRaw处理 输出。 沉重的解码和像素统计通常应在工人中运行.
色彩韵律添加什么
此叉保留了原始 API并添加了浏览器侧面所需的表面 相机绘图分析 :
- 存储和可见几何,包括边距、取向、像素 边和行投出
- FAF和FOVEON 源代码,加上16位 1,3,4个组件 缓冲器
- 相机矩阵、信道说明和白平衡乘数
- Rawpy-兼容调整后黑色水平和报告的每道线性最大值a
- 处理设置器
half_size财务报告和审定财务报表use_camera_wb - 类型
LibRawError具有稳定数字 LibRaw 错误代码的诊断 - LibRaw 的 X3F 解码器编译为 Web Assembly 架构
安装
npm install @colorhythm/libraw-wasm
生成的模块负载 libraw.wasm 并肩战斗 import.meta.url
在节点.js和相容捆绑。 网络大会二进制也是
导出为 @colorhythm/libraw-wasm/libraw.wasm 申请表
定制资产管道.
检查相机绘制的文件
import { LibRaw } from "@colorhythm/libraw-wasm";
async function inspectCameraRaw(file: File) {
await LibRaw.initialize();
const decoder = new LibRaw();
await decoder.waitUntilReady();
try {
decoder.open(await file.arrayBuffer());
decoder.unpack();
const source =
decoder.getRawImage() ??
decoder.getColor3Image() ??
decoder.getColor4Image();
if (source === null) {
throw new Error("LibRaw did not expose an unpacked source buffer");
}
const camera = decoder.getIParams();
return {
blackLevels: [0, 1, 2, 3].map((index) =>
decoder.getBlackLevel(index),
),
camera: `${camera.normalized_make} ${camera.normalized_model}`,
geometry: {
activeHeight: decoder.getActiveHeight(),
activeWidth: decoder.getActiveWidth(),
marginLeft: decoder.getLeftMargin(),
marginTop: decoder.getTopMargin(),
storedHeight: decoder.getRawHeight(),
storedWidth: decoder.getRawWidth(),
},
sourceSamples: source.length,
};
} finally {
decoder.dispose();
}
}
getRawImage(), (中文(简体) ), getColor3Image(),以及 getColor4Image() 返回时
拥有 Uint16Array 副本后 unpack()。它们继续有效
解码, recycle(),网络大会内存增长,或 dispose()方法返回
null 当 LibRaw 不显示文件的源版式时。 当前
绑定不会暴露 LibRaw 的浮点源缓冲.
1.1.0 相容性说明
1.1.0版本纠正了1.0.0引入的源-像素回还合同.
类型脚本返回类型是 Uint16Array | null,每个非核数组有:
准确的解开长度,不设行垫,每个阵列都拥有它的存储.
假设较早的非核类型应该选择可用来源的代码
明确布局,如上示例.
处理错误
LibRaw 失败抛出 LibRawError,保留了 LibRaw 数字错误
代码与诊断信息 :
import { LibRawError } from "@colorhythm/libraw-wasm";
try {
decoder.open(buffer);
} catch (error) {
if (error instanceof LibRawError) {
console.error(error.code, error.message);
}
throw error;
}
分析 API
| 区域 | 方法 | 页:1 |
|---|---|---|
| 几何 | getActiveHeight(), (中文(简体) ), getActiveWidth(), (中文(简体) ), getRawHeight(), (中文(简体) ), getRawWidth(), (中文(简体) ), getRawPitch()边角取出者, getFlip(), (中文(简体) ), getPixelAspect() | Raw维度描述所存储的数据;LibRaw的可见维度和边距定位图像区域. 这些值不一定是字面上的 DNG ActiveArea. Pitch 以字节表示. |
| 源头布局 | getColors(), (中文(简体) ), getCdesc(), (中文(简体) ), getFilters(), (中文(简体) ), getIsFoveon(), (中文(简体) ), color() | 描述非洲金融共同体和多渠道来源组织. getCdesc() 返回字符代码. |
| 源像素 | getRawImage(), (中文(简体) ), getColor3Image(), (中文(简体) ), getColor4Image() | 返回 LibRaw 为文件所曝光的已解开的 16 位源缓冲器 . |
| 职等 | getBlackLevel(), (中文(简体) ), getLinearMax(), (中文(简体) ), getColorMaximum(), (中文(简体) ), getDataMaximum() | 曝光调整了每个通道的黑色水平,每个通道的线性最大值,以及LibRaw常见并被观察到的最大值. 每道线性最大值可以是 0 当文件不提供时. |
| 字符化 | getCamMul(), (中文(简体) ), getPreMul(), (中文(简体) ), getCamXyz(), (中文(简体) ), getCmatrix(), (中文(简体) ), getRgbCam() | 曝光相机白-平衡乘数和数色矩阵. |
| 描述元数据 | getIParams(), (中文(简体) ), getImgOther(), (中文(简体) ), getLensInfo(), (中文(简体) ), getMakernotes(), (中文(简体) ), getShootingInfo() | 读取LibRaw所打入的元数据结构. 当需要完整标签覆盖时使用专用元数据解析器 . |
| 缩略图和渲染 | unpackThumb(), (中文(简体) ), dcrawMakeMemThumb(), (中文(简体) ), dcrawProcess(), (中文(简体) ), dcrawMakeMemImage() | 提供嵌入式预览和LibRaw处理后输出路径. |
静态方法曝光所编译的LibRaw版本,支持相机计数,以及 相机列表 :
await LibRaw.initialize();
console.log(LibRaw.version());
console.log(LibRaw.cameraCount());
console.log(LibRaw.cameraList());
处理政策
在前置处理参数 dcrawProcess()。 。 。 . setHalfSize(1) 请求
半线性维度,同时 setUseCameraWb(1) 请拍摄相机
白平衡乘数. 应用程序还应选择其输出颜色
明确与 setOutputColor() 而不是继承一个隐含的
LibRaw 默认值 .
未打开的源路径不调用 dcrawProcess() 因此,现在
适用于传感器内在分析.
工人使用情况
相机绘图解码和全分辨率统计可以消耗大量的CPU
时间和记忆 在浏览器应用程序中创建和使用 LibRaw 内置 a
敬业的工人。 传输输入 ArrayBuffer 给工人,表演
分析,并只返回界面摘要或像素数据
需要帮助.
每个成功 open() 将复制过的输入保存到另一个 open(), (中文(简体) ),
recycle(),或 dispose() 释放它。 为相继的工作重新使用解码器或
工人完成后处理它。 源像素获取器返回
可独立转让或保留的复制件.
网络大会加载和生命周期
LibRaw.initialize() 在一个 JavaScript 域内共享,它的第一个调用
选择WebAssembly有效载荷。 供应任何自定义 Response 或者说 ArrayBuffer
在构建解码器之前 :
const response = await fetch("/assets/libraw.wasm");
if (!response.ok) {
throw new Error(`Unable to load LibRaw WASM: ${response.status}`);
}
await LibRaw.initialize(await response.arrayBuffer());
通过一个 ArrayBuffer 避免依赖服务器的 Web Assembly MIME
类型。 通过一个 Response 允许流编译和要求
要发送的服务器 application/wasm。 。 。 .
开发
带有子模块的克隆,安装工作空间,并运行检查:
git clone --recurse-submodules https://github.com/colorhythm/libraw-wasm.git
cd libraw-wasm
corepack enable
pnpm install
pnpm check
pnpm test
重建网络大会二进制需要 make 和标志。 打开 emcc
财务报告和审定财务报表 em++ 打开 PATH设置 SYSROOT 给标记 cache/sysroot 目录,
然后运行 pnpm build。存储器的
建立设置动作
是支持的工具链的可执行引用.
血统和感谢
这是Colorhythm的维护叉 利布劳·瓦斯姆 以 藤间川素太郎。其类型脚本绑定和 WebAssembly 构建了浏览器侧 LibRaw 以实用扩展 。 谢谢, 素太郎 苏太郎.
立方圆形 由LibRaw有限责任公司及其 贡献者.
许可证
TypeScript 和WebAssembly 包装器在
MIT 许可证。 。 。 .
包含的 LibRaw 来源在其中之一
LGPL 2.1 软件
或者说
CDDL 1.0 (中文(简体) )。 。 。 .
参见 LibRaw 的
版权和通知
包括第三方组件。 npm tarball 包括所有三个
下方的 LibRaw 文件 LibRaw/。 。 。 .