前端将医学影像DCM转换为Base64 图像数据的方法
第一步 下载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 图像数据的方法的更多相关文章
- mssql sqlserver 将逗号分隔的一列数据转换为多列数据的方法分享
转自:http://www.maomao365.com/?p=10278 摘要: 下文讲述sqlserver中将使用逗号组合的单列数据,分隔为多列数据的方法 实验环境:sql server 2012 ...
- Inter IPP 处理图像数据的方法
Inter IPP没有读取图片和保存图片的函数,需要结合opencv完成这个功能. opencv读到图片以后逐个像素点赋值给IPP显然是不可取的,方法如下: int main(int argc, ch ...
- 基于cornerstone.js的dicom医学影像查看浏览功能
最近由于项目需求,需要医学影像.dcm文件的预览功能,功能完成后,基于原生Demo做一个开源分享. 心急的小伙伴可以先看如下基于原生js的全部代码: 一.全部代码 <!DOCTYPE html& ...
- Javascript高级编程学习笔记(93)—— Canvas(10) 模式及图像数据
模式 模式其实就是重复的图像,用来填充或描边图形 要创建一个新模式,可以调用 createPattern()并传入两个参数 一个HTML img元素 用于表示如何重复的字符串 "repeat ...
- 在C#中将图像转换为BASE64
本教程说明如何在C#.NET Windows Forms Application中将图像转换为base64字符串,以及将base64字符串转换为图像.您可以创建一个新的Windows窗体应用程序项目来 ...
- JS 前端 将图片转换为Base64利用H5 FileReader新特性
file = document.getElementById("image"); var file=file.files[0]; var fileName=file.name; ...
- 释放至强平台 AI 加速潜能 汇医慧影打造全周期 AI 医学影像解决方案
基于英特尔架构实现软硬协同加速,显著提升新冠肺炎.乳腺癌等疾病的检测和筛查效率,并帮助医疗科研平台预防"维度灾难"问题 <PAGE 1 LEFT COLUMN: CUSTOM ...
- 医学影像工作站程序ProDicom的说明
转载 http://blog.csdn.net/prodicom/article/details/4015064 注意:以下内容为转载,但保留了第一人称,请注意,以免造成不必要的麻烦. 医网联影像工作 ...
- js 图片转换为base64
<input id="file" type="file"> <img id="img" style="max-h ...
- node.js平台下,cropper.js实现图片裁剪预览并转换为base64发送至服务端。
一 .准备工作 1.首先需要先下载cropper,常规使用npm,进入项目路径后执行以下命令: npm install cropper 2. cropper基于jquery,在此不要忘记引入jq,同时 ...
随机推荐
- Visio绘制时间轴安排图的方法
本文介绍基于Visio软件绘制时间轴.日程安排图.时间进度图等的方法. 在很多学习.工作场合中,我们往往需要绘制如下所示的一些带有具体时间进度的日程安排.工作流程.项目进展等可视化图表. ...
- 基于pandas的数据清洗 -- 异常值的清洗
博客地址:https://www.cnblogs.com/zylyehuo/ 开发环境 anaconda 集成环境:集成好了数据分析和机器学习中所需要的全部环境 安装目录不可以有中文和特殊符号 jup ...
- 深入掌握FastAPI与OpenAPI规范的高级适配技巧
title: 深入掌握FastAPI与OpenAPI规范的高级适配技巧 date: 2025/03/30 01:16:11 updated: 2025/03/30 01:16:11 author: c ...
- while(bug)
while(bug) { // 加了班也不一定写的完代码 // 写完了代码也不一定编译的过 // 编译过了也不一定没bug // 有了bug也不一定找的到 // 找到bug也不一定改的了 // 改了这 ...
- 学习Django【1】模型
编辑 models.py 文件,改变模型. 运行 python manage.py makemigrations 为模型的改变生成迁移文件. 运行 python manage.py migrate 来 ...
- unigui的错误delphi clientHeight:property clientheight does not exist【10】
在unigui运行中发现这样的错误clientHeight:property clientheight does not exist. 这是啥原因.从老版本中复制过来的代码含dfm会出现这样的错误. ...
- unigui的部署【9】
1.UniGUIServerModule的事件: procedure TUniServerModule.UniGUIServerModuleBeforeInit(Sender: TObject);be ...
- 🎀idea import配置
简介 本文记录idea中import相关配置:自动导入依赖.自动删除无用依赖.避免自动导入*包 自动导入依赖 在编辑代码时,当只有一个具有匹配名称的可导入声明时,会自动添加导入 File -> ...
- vue路由params传参时出现undefined
1.问题: 使用params方式传参时(参数不显示的方式) 获取参数时,参数undefined 2.解决: push时请使用name,不要使用path(路由的params对象使用,必须通过路由名nam ...
- Robot Framework绝对路径转相对路径
如上图,添加商品需要上传商品图片,如此,设计脚本时候会填入图片的路径,使自动化能够自动到目的路径内获取图片上传 C:\\Users\\Beckham\\Desktop\\test2\\autoTest ...