@cornerstonejs/dicom-codec

中文文档
1.2.0发布于 2026/10/14ISCCommonJS构建来源已验证近 30 天下载 3930

用于JavaScript的DICOM编码器,有浏览器和Node.js支持.

中文使用文档
文档目录10 节
  1. 下一次发布规划
  2. 未来发布
  3. 解码
  4. 编码
  5. 转码
  6. 获取像素数据
  7. 设置配置
  8. 传输语法特定编码选项
  9. JPEG XL 密码
  10. 测试

二相码c

用于JavaScript的DICOM编码器,有浏览器和Node.js支持.

特征(v1.0.1)

代码名称语法UID( s)解码编码外部编码cjs/wasm 基数
小恩地语Name1.2.840.1008.1.2 1.2.840.1008.1.2.2.1 1.2.840.1008.1.2.一.一.99- 说吧- 说吧- 说吧- 说吧
大恩地语Name1.2.840.1008.1.2.2 (中文(简体) )- 说吧- 说吧- 说吧- 说吧
利比佩克图尔博8比特1.2.840.1008.1.2.2.4.50 (中文(简体) )页:1页:1页:1页:1
Libjpeg Turbo12 比特语1.2.840.1008.1.2.2.4.51 (中文(简体) )- 说吧- 说吧- 说吧- 说吧
Jpeg 无废1.2.840.1008.1.2.4.57 1.2.840.1008.2.4.70页:1- 说吧页:1- 说吧
树脂1.2.840.1008.1.2.4.80 1.2.840.1008.1.2.4.81页:1页:1页:1页:1
Jpeg 2000 (日语)1.2.840.1008.1.2.4.90 1.2.840.1008.1.2.4.91 (中文(简体) )页:1页:1页:1页:1
JpegXL 图像1.2.840.1008.1.2.4.110 1.2.840.1008.1.2.4.111 1.2.840.1008.1.2.1.2.12页:1X 除外 .111页:1页:1
无色1.2.840.1008.1.2.2.5 (中文(简体) )页:1- 说吧- 说吧- 说吧
HTJ2K 电话1.2.840.1008.1.2.202 (201,203 也)页:1页:1页:1页:1

下一次发布规划

v0.0.11: 对 Libjpeg Turbo12 Bit 的支持 v.0.0.12 编码选项支持. v1.0.0:支持浏览器(包含动态加载)和节点.

未来发布

  • Rle Losless to be js/wasm based. 莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱.
  • 支持现有解码器的其他操作.
  • 支持其余的DICOM转移语法.

大楼

# Restore packages
pnpm install

# Build
pnpm run build

如何使用

常见

const dicomCodec = require('@cornerstonejs/dicom-codec');
....
const imageFrame = ....// see API
const imageInfo = {} // add here image information (see API)
const result = await dicomCodec.transcode(imageFrame, imageInfo, sourceTransferSyntaxUID, targetTransferSyntaxUID);
const pixelData = dicomCodec.getPixelData(result.imageFrame, result.imageInfo);

ES6 标准

import dicomCodec from '@cornerstonejs/dicom-codec';
...
const imageFrame = ....// see API
const imageInfo = {} // add here image information (see API)
const result = await dicomCodec.transcode(imageFrame, imageInfo, sourceTransferSyntaxUID, targetTransferSyntaxUID);
const pixelData = dicomCodec.getPixelData(result.imageFrame, result.imageInfo);

API 密码

解码

解码图像的async函数

参数(它没有变异任何参数:

  • 被压缩的ImageFrame - 有被压缩的图像框架字节的打入阵列.
  • 图像信息 - 对象
    • 行- 有图像行/ 高度的数字 .
    • 列 - 有图像列/宽的数字.
    • 位点分配 - 每个像素样本带有位点的数字.
    • 样本PerPixel - 每像素含有组件数量的数字.
    • 签名 - 如果像素数据被签名, 布尔为真; 如果未签名, 则为假.
  • 源代码 TransferSyntaxUID - 与压缩图像框的传输语法 uid 字符串

回返情况:

  • 对象
    • 图像Frame - 有未压缩图像框架字节的打入阵列( 大部分代码返回 Uint8Array, 但是可以看到 Uint16Array, Int16Array)
    • 图像信息 - 对象
      • 行- 有图像行/ 高度的数字 .
      • 列 - 有图像列/宽的数字.
      • 位点分配 - 每个像素样本带有位点的数字.
      • 样本PerPixel - 每像素含有组件数量的数字.
      • 签名 - 如果像素数据被签名, 布尔为真; 如果未签名, 则为假.
      • 还有一些其他的编码属性.

如果源代码TransferSyntaxUID或相關的codec's transferSyntaxUID没有代码,则不发生解码. SyntaxUID指未压缩.

编码

编码图像的async 函数

参数(它没有变异任何参数:

  • 图像Frame - 带有未压缩图像框字节的打入阵列
  • 图像信息 - 对象
    • 行- 有图像行/ 高度的数字 .
    • 列 - 有图像列/宽的数字.
    • 位点分配 - 每个像素样本带有位点的数字.
    • 样本PerPixel - 每像素含有组件数量的数字.
    • 签名 - 如果像素数据被签名, 布尔为真; 如果未签名, 则为假.
  • 目标转换语法UID - 将图像框编码为
  • 编码选项 - 对象 - 每个编码器所特有的内容(见下文) (v>=0.0.12)

回返情况:

  • 对象
    • 图像Frame - 有图像框架字节的键入箭头( 大部分编码器返回 Uint8 箭头, 但可见 Uint16 Array, Int16 Array)
    • 图像信息 - 对象
      • 行- 有图像行/ 高度的数字 .
      • 列 - 有图像列/宽的数字.
      • 位点分配 - 每个像素样本带有位点的数字.
      • 样本PerPixel - 每像素含有组件数量的数字.
      • 签名 - 如果像素数据被签名, 布尔为真; 如果未签名, 则为假.
      • 还有一些其他的编码属性.
    • 进程信息 - 对象
      • 持续时间 - 以毫秒为单位的流程长度.

如果目标TransferSyntaxUID或相關的codec's transferSyntaxUID没有代码,则不发生编码. SyntaxUID指未压缩.

转码

转换图像(解码后编码)的async函数

参数(它没有变异任何参数:

  • 图像Frame - 有图像框架字节的打入阵列
  • 图像信息 - 对象
    • 行- 有图像行/ 高度的数字 .
    • 列 - 有图像列/宽的数字.
    • 位点分配 - 每个像素样本带有位点的数字.
    • 样本PerPixel - 每像素含有组件数量的数字.
    • 签名 - 如果像素数据被签名, 布尔为真; 如果未签名, 则为假.
  • 源代码 transferSyntaxUID - 与压缩器的传输语法uid相接字符串.
  • 目标转换语法UID - 用转语法 uid 字符串将图像框编码为.
  • 编码选项 - 对象 - 每个编码器所特有的内容(见下文) (v>=0.0.12)

回返情况:

  • 对象
    • 图像Frame - 有未压缩图像框架字节的打入阵列( 大部分代码返回 Uint8Array, 但是可以看到 Uint16Array, Int16Array)
    • 图像信息 - 对象
      • 行- 有图像行/ 高度的数字 .
      • 列 - 有图像列/宽的数字.
      • 位点分配 - 每个像素样本带有位点的数字.
      • 样本PerPixel - 每像素含有组件数量的数字.
      • 签名 - 如果像素数据被签名, 布尔为真; 如果未签名, 则为假.
      • 还有一些其他的编码属性.
    • 进程信息 - 对象
      • 持续时间 - 以毫秒为单位的流程长度.

转码可能不会发生,取决于转出SyntaxUID的参数(见上文).

获取像素数据

函数返回基于图像Info格式化的图像Frame 一些解码器可能根据图像Info对像素Data有特定规则.

参数(它没有变异任何参数:

  • 图像Frame - 带有未压缩图像框字节的打入阵列
  • 图像信息 - 对象
    • 行- 有图像行/ 高度的数字 .
    • 列 - 有图像列/宽的数字.
    • 位点分配 - 每个像素样本带有位点的数字.
    • 样本PerPixel - 每像素含有组件数量的数字.
    • 签名 - 如果像素数据被签名, 布尔为真; 如果未签名, 则为假.

回返情况:

  • 对象
    • 映像Frame - 有映像框字节的打入阵列(大多数代码返回了Uint8Array,但可以看到Uint16Array,Int16Array). 每个解码器可能基于图像Info来不同地对待这个.

设置配置

设置 dicom-codec 配置属性的函数 参数(它没有变异任何参数 :

  • 选项 - 对象
    • 动词 - 如果dicom-codec是动词,则布尔真能,否则是虚假的.

传输语法特定编码选项

JPEG XL 密码

传输语法 1.2.840.10008.1.2.4.110 总是使用无损失编码. 传输语法 1.2.840.10008.1.2.4.111 仅因为 像素编码器不创建JPEG重建数据.

传输语法 1.2.840.10008.1.2.4.112 接受这些编码选项 :

  • lossless:布尔,默认为 true。 。 。 .
  • distance: Butteraugli距离从0到25,用于失序编码. 默认为 1.0 ——cjxl的默认,"可视无亏"——何时 lossless 实值 false 财务报告和审定财务报表 没有给出距离 。 不要依赖 libjxl 自身的默认 0: 它达到了 距离 0 通过 VarDCT 而不是模块化路径,该路径大于 一个真正的无损失编码 仍然不是无损失.
  • effort:整数从1到9.
  • decodingSpeed:整数从0到4.

已签名的像素数据

JPEG XL 没有签名的样本类型 - JxlDataType 无符号整数或浮动 ——所以像素代表不能被带入代码流. 第3.5页 8.2.15 允许像素表达式为单色 JPEG XL 图像的 1, 但定义 没有任何机制,所以绘图是一个公约。 此库使用 每个传输语法不同,并自动应用:

传输语法已签名样本
.110 无损失传入为二相补. 字节精确的回程;赤色的代码流读取为未签名,任何应用像素代表的阅读器本身都同意.
.112等级在编码前和解码后相接后相接上取了样本范围的一半.

.112 需要改变,因为作为未签名的 CT 框架 [-2048, 1704] 变成 [0, 1704] 加号 [63488, 65535]和丢失的编码涂片 相差:2211 HU 最大误差为1.0距离而无. 实行轮班制 给每个签名的 .112 框架、无损失选项或非损失选项,以便解码 倒置它只知道转移语法.

有两个后果值得了解:

  • 签名框架在下面产生不同的字节 .110 财务报告和审定财务报表 .112两种解码 回到相同的像素这里,但是 .112 流读取的解码器 假设2的补缺 由 2^(BitsStored-1)没有 标准对公约作了区分.
  • 巴特劳格利的距离是相对于全的 BitsAllocated 范围。 简历 大约占到16位范围的6%,所以距离1.0仍然允许 几百个HU错误。 使用小距离,或 .110,当HU忠诚 问题.

同样的限制也适用于JPEG-LS,它也没有标志旗;这个 库只为此对 JPEG-LS 进行无穷编码.

测试

pnpm run test   # run vitest dispatch + integration tests

集成测试需要每一个基础的 enm编码器 dist/ 待建项目 本地的,否则它们会完全跳过。 CI先构建一切.

版本与发布记录

@cornerstonejs/dicom-codec 共发布 31 个版本,首次发布于 2021/02/15;过去 12 个月发布了 9 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
1.2.0latest2026/10/1427 天前
1.1.62026/09/102 个月前
1.1.52026/09/092 个月前
1.1.42026/09/092 个月前
1.1.32026/09/092 个月前
1.1.22026/09/042 个月前

关于 @cornerstonejs/dicom-codec 的常见问题

@cornerstonejs/dicom-codec 是什么?

用于JavaScript的DICOM编码器,有浏览器和Node.js支持.

如何安装 @cornerstonejs/dicom-codec?

在项目目录运行 npm install @cornerstonejs/dicom-codec,或使用 pnpm add / yarn add / bun add。

@cornerstonejs/dicom-codec 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/cornerstonejs__dicom-codec 是否存在。

@cornerstonejs/dicom-codec 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@cornerstonejs/dicom-codec 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=24。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@cornerstonejs/dicom-codec 可以商用吗?

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

@cornerstonejs/dicom-codec 的下载量有多少?

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

@cornerstonejs/dicom-codec 还在维护吗?

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