NodeJs对DICOM医学影像文件中的TAG进行修改编辑

最近公司有个新需求是对DICOM文件中的TAG进行修改编辑,我查了很多资料,找到了nodejs的第三方包DicomEdit.js可以实现这个需求。

安装包可以使用下面命令“

npm install dicomedit
yarn add dicomedit

但因为一些众所周知原因,大家可能无法下载安装成功,此时可以直接去github下载整个包,build后,整个复制到项目的node_modules,以dicomedit命名。

在build中如果发生错误,根据错误提示解决。

完成后先引用对应的模块

const { Anonymizer } = require('dicomedit/dist/node/dicomedit.min'); //DICOM文件编辑
const fs = require('fs'); //文件操作
import * as dicomParser from 'dicom-parser'; //DICOM文件解析,测试用,非必须

然后是对DICOM文件中的TAG进行修改,这里我举例几个主要的tag,包括PatientID,PatientName,StudyDate,StudyID

try {
      const srcFileName = 'C:/old.dcm'; //你的测试用DICOM文件地址
      const objFileName = 'C:/new.dcm'; //生成新的文件地址
      //这里是先打印看看原来的tag内容
      let dicomFileAsBuffer = fs.readFileSync(srcFileName);
      let dataSet = dicomParser.parseDicom(dicomFileAsBuffer);
      console.log('PatientID====', dataSet.string('x00100020'));
      console.log('PatientName====', dataSet.string('x00100010'));
      console.log('StudyDate====', dataSet.string('x00080020'));
      console.log('StudyID====', dataSet.string('x00200010'));

      //要修改的几个tag
      const PatientID = 'NO12345678'; //这些都可以修改
      const PatientName = 'ZhangSan';
      const StudyDate = '20230406';
      const StudyID = '9876543210';

      let script = `version "6.3"`; //声明版本

      if (PatientID) {
        script += `
          (0010,0020) := "${PatientID}"`; //这里需要换行的
      }
      if (PatientName) {
        script += `
          (0010,0010) := "${PatientName}"`;
      }
      if (StudyDate) {
        script += `
          (0008,0020) := "${StudyDate}"`;
      }
      if (StudyID) {
        script += `
          (0020,0010) := "${StudyID}"`;
      }

      const anonymizer = new Anonymizer(script);

      anonymizer.loadDcmUsingFileName(srcFileName);
      await anonymizer.applyRules();

      const buffer = anonymizer.write();
      fs.writeFileSync(objFileName, new Uint8Array(buffer));

      //这里打印修改后的tag
      dicomFileAsBuffer = fs.readFileSync(objFileName);
      dataSet = dicomParser.parseDicom(dicomFileAsBuffer);
      console.log('PatientID2====', dataSet.string('x00100020'));
      console.log('PatientName2====', dataSet.string('x00100010'));
      console.log('StudyDate2====', dataSet.string('x00080020'));
      console.log('StudyID2====', dataSet.string('x00200010'));
    } catch (err) {
      console.log(err);
    }

执行后我们就得到了一个已经修改了tag的新的DICOM文件,当然我们也可以直接覆盖原来文件,这个根据需求决定。

你可能感兴趣的:(nodeJs,JS,javascript,npm,node.js,dicom)