前端将医学影像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,同时 ...
随机推荐
- 【Vue3】下载zip文件损坏的问题
需求: 需要在vue3上实现Asp.net Web API 下载zip包的功能,本身需求很简单,但是中间遇到了问题,记录一下. 问题: 下载的zip包和后端的zip包大小不一致,后端生成的zip 61 ...
- Joker 智能开发平台再推重磅新品,引领开发新潮流
自 Joker 智能开发平台的前端可视化版本惊艳亮相后,便迅速在行业内掀起热潮,其创新的理念与出色的性能,为开发者和企业打造了高效.便捷的开发新路径,备受瞩目与好评.如今,Joker 智能开发平台即将 ...
- MySQL配置主从复制教程(MySQL8)
原理: 数据库在进行DDL和DML语句操作时,会被记录到binlog的日志文件里,而读取这里面的日志就可以知道数据库进行过哪些DDL和DML操作,这是主数据库的日志,从数据库经过相关配置可以实时获取到 ...
- WEBGL 笔记
目录 前言 h2 { text-align: center } 前言 WebGL 是一个在浏览器里使用的高效渲染二维和三维图形的 javascript API,于 2006 年起源,该技术基于 Ope ...
- Python进阶知识:多进程/多线程/装饰器
本文写作于2025.3.20,恰好作者正好在外面实习,于此同时在实际工作中遇到这些知识点,因此就进行一个简短汇总方便后续回顾,内容同步更新(显示问题可以直接看):https://www.big-yel ...
- 一文速通Python并行计算:04 Python多线程编程-多线程同步(上)—基于条件变量、事件和屏障
一文速通 Python 并行计算:04 Python 多线程编程-多线程同步(下)-基于条件变量.事件和屏障 摘要: 本文介绍了 Python 多线程同步的三种机制:条件变量(Condition).事 ...
- Math类、System类--java进阶day05
1.Math类 Math类里所有方法都被static修饰,说明它是一个工具类,不需要创建对象,直接类名调用 2.Math方法展示 . 3.System类 SYstem方法展示 1.currentTim ...
- 读取excel单元格填过得的坑
通过TdxSpreadSheet读取excel单元格值. 有一个cxDBTreeList来来表现科室单元,可是从科室单元excel文件中读取单元内容后,各种报错.一度怀疑cxdbtree的bug. 实 ...
- Win10资源管理器导航窗格显示/隐藏项目-注册表
一.隐藏快速访问 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer HubMode(类型:REG_DWORD) ...
- 阿里云服务器中Linux下centos7.6安装mysql8.0.11
1.下载安装 MySQL最新下载地址:https://dev.mysql.com/downloads/mysql/ 选择的是Linux 64位通用的二级制版本,这样不在需要进行编译安装,系统安装依赖 ...