第一步 下载dicom-parser.js库

npm安装:

npm install dicom-parser

第二步 封装dcm转换base64图像数据的方法

/**
* dicomToBase64.js文件
*/ import * as dicomParser from 'dicom-parser'; //导入dicom-parser.js库 /**
* 将 DICOM 文件转换为 Base64 图像数据
* @param {string} url - DICOM 文件的 URL 或 Blob 地址
* @returns {Promise<string>} - 返回 Base64 图像数据
*/
async function dicomToBase64(url) {
return new Promise((resolve, reject) => {
// 使用 Fetch API 获取 DICOM 文件的 ArrayBuffer
fetch(url)
.then(response => response.arrayBuffer())
.then(arrayBuffer => {
// 解析 DICOM 文件
const dataSet = dicomParser.parseDicom(new Uint8Array(arrayBuffer)); // 获取像素数据
const pixelDataElement = dataSet.elements.x7fe00010; // Pixel Data 的 tag 是 (7FE0,0010)
const pixelData = new Uint16Array(dataSet.byteArray.buffer, pixelDataElement.dataOffset, pixelDataElement.length / 2); // 获取图像的行数和列数
const rows = dataSet.uint16('x00280010'); // Rows
const columns = dataSet.uint16('x00280011'); // Columns // 创建 Canvas 并绘制图像
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
canvas.width = columns;
canvas.height = rows; // 将单通道灰度值转换为 RGBA 格式
const rgbaData = new Uint8ClampedArray(columns * rows * 4);
for (let i = 0; i < columns * rows; i++) {
const grayValue = pixelData[i];
rgbaData[i * 4] = grayValue; // Red
rgbaData[i * 4 + 1] = grayValue; // Green
rgbaData[i * 4 + 2] = grayValue; // Blue
rgbaData[i * 4 + 3] = 255; // Alpha (不透明)
} // 创建 ImageData 对象
const imageData = new ImageData(rgbaData, columns, rows);
ctx.putImageData(imageData, 0, 0); // 将 Canvas 内容转换为 Base64 图像
const base64Data = canvas.toDataURL('image/png');
resolve(base64Data);
})
.catch(error => {
reject(error);
});
});
} export default dicomToBase64;

第三步:使用示例

使用dcm网络地址的示例:

import dicomToBase64 from './path/to/dicomToBase64.js'; //引入封装的方法

const dicomUrl = 'https://example.com/path/to/image.dcm';  //dcm文件网络地址
dicomToBase64(dicomUrl)
.then(base64Data => {
console.log('Base64 图像数据:', base64Data);
// 可以将 base64Data 设置到 img 的 src 属性中显示图像
})
.catch(error => {
console.error('转换失败:', error);
});

使用 Blob 地址的示例:

import dicomToBase64 from './path/to/dicomToBase64.js'; //引入封装的方法

const blobUrl = URL.createObjectURL(blob); // Blob 地址,可通过前端本地上传生成。例如:blob:https://localhost.com/b614-6956-6e52-40
dicomToBase64(blobUrl)
.then(base64Data => {
console.log('Base64 图像数据:', base64Data);
// 可以将 base64Data 设置到 img 的 src 属性中
})
.catch(error => {
console.error('转换失败:', error);
});

至此,就完成了解析到base64数据了,前端将base64数据放入img标签中就可以直接显示渲染结果啦~

前端将医学影像DCM转换为Base64 图像数据的方法的更多相关文章

  1. mssql sqlserver 将逗号分隔的一列数据转换为多列数据的方法分享

    转自:http://www.maomao365.com/?p=10278  摘要: 下文讲述sqlserver中将使用逗号组合的单列数据,分隔为多列数据的方法 实验环境:sql server 2012 ...

  2. Inter IPP 处理图像数据的方法

    Inter IPP没有读取图片和保存图片的函数,需要结合opencv完成这个功能. opencv读到图片以后逐个像素点赋值给IPP显然是不可取的,方法如下: int main(int argc, ch ...

  3. 基于cornerstone.js的dicom医学影像查看浏览功能

    最近由于项目需求,需要医学影像.dcm文件的预览功能,功能完成后,基于原生Demo做一个开源分享. 心急的小伙伴可以先看如下基于原生js的全部代码: 一.全部代码 <!DOCTYPE html& ...

  4. Javascript高级编程学习笔记(93)—— Canvas(10) 模式及图像数据

    模式 模式其实就是重复的图像,用来填充或描边图形 要创建一个新模式,可以调用 createPattern()并传入两个参数 一个HTML img元素 用于表示如何重复的字符串 "repeat ...

  5. 在C#中将图像转换为BASE64

    本教程说明如何在C#.NET Windows Forms Application中将图像转换为base64字符串,以及将base64字符串转换为图像.您可以创建一个新的Windows窗体应用程序项目来 ...

  6. JS 前端 将图片转换为Base64利用H5 FileReader新特性

      file = document.getElementById("image"); var file=file.files[0]; var fileName=file.name; ...

  7. 释放至强平台 AI 加速潜能 汇医慧影打造全周期 AI 医学影像解决方案

    基于英特尔架构实现软硬协同加速,显著提升新冠肺炎.乳腺癌等疾病的检测和筛查效率,并帮助医疗科研平台预防"维度灾难"问题 <PAGE 1 LEFT COLUMN: CUSTOM ...

  8. 医学影像工作站程序ProDicom的说明

    转载 http://blog.csdn.net/prodicom/article/details/4015064 注意:以下内容为转载,但保留了第一人称,请注意,以免造成不必要的麻烦. 医网联影像工作 ...

  9. js 图片转换为base64

    <input id="file" type="file"> <img id="img" style="max-h ...

  10. node.js平台下,cropper.js实现图片裁剪预览并转换为base64发送至服务端。

    一 .准备工作 1.首先需要先下载cropper,常规使用npm,进入项目路径后执行以下命令: npm install cropper 2. cropper基于jquery,在此不要忘记引入jq,同时 ...

随机推荐

  1. 提示词工程——AI应用必不可少的技术

    引言 在人工智能技术飞速发展的今天,大语言模型(LLM)已成为推动技术革新的核心引擎.然而,如何让这些"聪明"的模型真正落地业务场景.解决实际问题?答案往往不在于模型本身的参数规模 ...

  2. antd+vue 中select组件的自定义后缀图标不显示问题记录

    根据项目需求,需要使用select组件,并自定义后缀图标,但是设置了没的效果,这是我的代码和效果图 后来查看代码发现需要给select组件加上showArrow属性,然后实现了效果,看效果图 这里记录 ...

  3. Python Object of type float32 is not JSON serializable

    前言 使用 json.dumps(result) 对数据转 JSON 数据出现错误:TypeError: Object of type float32 is not JSON serializable ...

  4. kubernetes failed to create kubelet: misconfiguration: kubelet cgroup driver: "cgroupfs" is different from docker cgroup driver: "systemd"

    错误原因 kubernetes 的文件驱动与 docker 不一致,导致镜像无法启动. docker info 可以看到驱动方式 Cgroup Driver: systemd. 解决方案 统一资源管理 ...

  5. VMware网络虚拟化介绍(之一)

    2014年5月,在我加入VMware三个月之后,我涂鸦了一篇<扒一扒SDN的那些事儿>,当时放言如果阅读量过百就写续篇.后来果然阅读量没过百,也就80多的样子,其中好几份还是我自恋地进去查 ...

  6. Netty源码—7.ByteBuf原理二

    大纲 9.Netty的内存规格 10.缓存数据结构 11.命中缓存的分配流程 12.Netty里有关内存分配的重要概念 13.Page级别的内存分配 14.SubPage级别的内存分配 15.Byte ...

  7. 泛型--java进阶day10

    1.泛型 2.泛型--统一数据类型 如下图,当我们在泛型中添加不同的数据类型,add方法需要的数据类型也随之改变 [1] [2] 泛型--默认类型object 当我们不指定泛型时,泛型的默认类型为ob ...

  8. 【SpringCloud】SpringCloud config分布式配置中心

    SpringCloud config分布式配置中心 概述 分布式系统面临的---配置问题 微服务意味着要将单体应用中的业务拆分成一个个子服务 ,每个服务的粒度相对较小,因此系统中会出现大量的服务.由于 ...

  9. .ocx注册失败以及IE使用获取不到.ocx方法的解决办法

    小伙伴写了个.ocx给我,来实现在IE里用<object>获取,并用js调用.ocx的方法去控制XX硬件 Error[1],.ocx注册失败,提示如下: 解决[1]如下: 首先需要下载个工 ...

  10. FDMemtable如何增加一条自身复制的记录

    procedure TFrame_Bill.CopyARecord; var lAFDmemtable : TFDMemTable; begin {$REGION '增加一条复制的记录'} try l ...