使用 dcm4che 操作 Dicom 文件

一、使用dcm4che3的准备工作

1.1、dcm4che git地址:GitHub - dcm4che/dcm4che: DICOM Implementation in JAVA

1.2、 执行 mvn install -DskipTests 命令进行安装( 我下载的是5.24.0 版本)

这是执行成功的效果,中间那种找包就不在这里阐述了;大家如果想要直接使用的话,我已经把包上传到CSDN上了:传送门 

二、操作 Dicom 文件

2.1、引入jar包

<dependency>
    <groupId>org.dcm4che</groupId>
    <artifactId>dcm4che-core</artifactId>
    <version>5.24.0</version>
</dependency>

2.2、代码例子

package com.exampl;

import org.dcm4che3.data.Attributes;
import org.dcm4che3.data.Tag;
import org.dcm4che3.data.VR;
import org.dcm4che3.io.DicomInputStream;
import org.dcm4che3.io.DicomOutputStream;
import org.springframework.util.StringUtils;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

/**
 * @ClassName PrecessDcmUtils
 * @Description
 * @Author WangJing
 * @Date 2021/8/9 10:39 上午
 * @Version V1.1.0
 */
public class PrecessDcmUtils2 {

    public static void execute(String path, String newPath) throws IOException {
        DicomInputStream in = null;
        Attributes attr = null;
        DicomOutputStream dout = null;

        try {
            in = new DicomInputStream(new File(path));
            attr = in.readDataset();

            //========患者信息
            //患者ID
            attr.setString(Tag.PatientID, VR.LO, "****");
            //患者姓名
            attr.setString(Tag.PatientName, VR.PN, "****");
            //出生日期
            attr.setString(Tag.PatientBirthDate, VR.DA, "20210101");
            //性别
            attr.setString(Tag.PatientSex, VR.CS, "F");
            //年龄
            attr.setString(Tag.PatientAge, VR.AS, "99Y");

            //========医院信息
            //医院姓名
            attr.setString(Tag.InstitutionName, VR.LO, "********");
            //医院地址
            attr.setString(Tag.InstitutionAddress, VR.ST, "**********");

            //检查信息
            String referringPhysicianName = attr.getString(Tag.ReferringPhysicianName);
            if (!StringUtils.isEmpty(referringPhysicianName)) {
                attr.setString(Tag.ReferringPhysicianName, VR.PN, "****");
            }

            File newFile = new File(newPath);
            dout = new DicomOutputStream(newFile);
            //Attribute写入,完成更改
            dout.writeDataset(in.getFileMetaInformation(), attr);
        } catch (Exception exception) {
            System.out.println(exception);
        } finally {
            //老老实实挨个关掉清理
            if (dout != null) {
                dout.finish();
                dout.flush();
                dout.close();
            }
            if (in != null) {
                in.close();
            }
        }
    }


    public static void main(String[] args) throws IOException {
        execute("/Users/wangjing/Desktop/dcm文件包/03682330/", "/Users/wangjing/Desktop/dcm文件包/03682330/");
    }
}

三、执行效果

3.1、原文件(源文件涉及到敏感信息就不展示了) 

3.2、新文件 

注:以上内容仅提供参考和交流,请勿用于商业用途,如有侵权联系本人删除! 


版权声明:本文为wang_jing_jing原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。