@cornerstonejs/dicom-image-loader
初始化与配置
迁移前:
cornerstoneDICOMImageLoader.external.cornerstone = cornerstone;
cornerstoneDICOMImageLoader.external.dicomParser = dicomParser;
cornerstoneDICOMImageLoader.configure({
useWebWorkers: true,
decodeConfig: {
convertFloatPixelDataToInt: false,
use16BitDataType: preferSizeOverAccuracy || useNorm16Texture,
},
});
// 其他配置……
cornerstoneDICOMImageLoader.webWorkerManager.initialize(config);
迁移后:
cornerstoneDICOMImageLoader.init();
// 也可以给 init 传一个配置对象
cornerstoneDICOMImageLoader.init({
maxWebWorkers: 2, //
});
迁移指引:
- 把 configure 换成
init。 - 不再需要传入 cornerstone 和 dicomParser——我们在内部直接使用它们, 并把它们当作依赖引入。
- 去掉
useWebWorkers选项,因为现在始终使用 Web Worker。 - 去掉
decodeConfig选项,它们已不再适用。 - 去掉单独的
webWorkerManager.initialize调用,这一步现在由内部处理。 - 把
maxWebWorkers设在 configure 的选项里,而不是另给一个 config 对象。- 默认情况下我们会用可用核心数的一半。
externalModules 被移除
externalModules 文件已被移除。任何依赖 cornerstone.external 的代码
都应改为使用直接 import 或新的配置方式。我们现在把 cornerstonejs/core
和 dicomparser 当作普通依赖,在内部直接引入。
Webpack 配置
如果你的配置中有下面这条 Webpack 规则,请删掉它:
{
test: /\.worker\.(mjs|js|ts)$/,
use: [
{
loader: 'worker-loader',
},
],
},
Web Worker 现在由库内部处理。
一律预先缩放(Prescale)
默认情况下,Cornerstone3D 始终会用模态 LUT(rescale slope 与 intercept) 对影像做预先缩放。你的代码大概不需要做任何改动。
Details
为什么?
以前是由视口来决定是否做预先缩放,所有视口都沿用这个做法。 但我们在一些用户自行实现的影像加载器中发现了预缩放相关的缺陷。 现在我们通过统一地应用预缩放修好了这些问题。解码器的更新
@cornerstonejs/dicomImageLoader 此前使用的是旧的 Web Worker API,
那套 API 现已废弃。它已经改用新的 Web Worker API——
通过我们在 comlink 包之上新写的内部封装实现。这项改动让与 Web Worker
的交互更顺畅,也便于把 Web Worker 编译打包成与该库 ESM 版本相匹配的形式。
为什么?
为了用一种新的 ES 模块格式统一 Web Worker API,
这样像 vite 这类新的打包工具就能与该库顺畅配合。
因此,如果你在 webpack 或其他打包工具里有自定义逻辑,可以把下面这条规则删掉:
{
test: /\.worker\.(mjs|js|ts)$/,
use: [
{
loader: 'worker-loader',
},
],
},
不再支持非 Web Worker 解码器
我们在 cornerstone3D 2.0 版本中移除了对非 Web Worker 解码器的支持。 这样做是为了让库的性能更好,同时减小包体积。
为什么?
我们看不到再使用非 worker 解码器的充分理由。Web Worker 解码器性能更优, 与现代打包工具的兼容性也更好。
imageFrame 上的 minAfterScale 与 maxAfterScale 被移除
它们被 smallestPixelValue 和 largestPixelValue 取代。
以前这四个字段是一起用的,很难判断该用哪一个。
DICOM 影像加载器默认改为 ESM
我们在 cornerstone3D 2.0 版本中把 DICOM 影像加载器的默认导出改为了 ESM, 并且正确地发布了类型定义。
这意味着你不再需要为 dicom image loader 配置 alias。
- 迁移前 📦
- 迁移后 🚀🚀
你在 webpack 或其他打包工具里大概有过这样的配置:
alias: {
'@cornerstonejs/dicom-image-loader':
'@cornerstonejs/dicom-image-loader/dist/dynamic-import/cornerstoneDICOMImageLoader.min.js',
},
现在可以把这个 alias 删掉,直接用默认 import。
为什么?
ESM 是 JavaScript 的未来,我们希望确保该库与现代打包工具和工具链兼容。