1.加载依赖包
我用阿里云盘分享了「jar包」,你可以不限速下载🚀
复制这段内容打开「阿里云盘」App 即可获取
链接:https://www.aliyundrive.com/s/QSmu324yMkt
2.Maven项目导入依赖包
- dcm4che依赖包的放置位置
- maven引入dcm4che包
<!--dcm4che依赖-->
<dependency>
<groupId>org.dcm4che</groupId>
<artifactId>dcm4che-tool-dcm2jpg</artifactId>
<version>3.3.3</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/dcm4che-tool-dcm2jpg-3.3.3-SNAPSHOT.jar</systemPath>
</dependency>
<!--dcm4che依赖-->
<dependency>
<groupId>org.dcm4che</groupId>
<artifactId>dcm4che-image</artifactId>
<version>3.3.3</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/dcm4che-image-3.3.3-SNAPSHOT.jar</systemPath>
</dependency>
<!--dcm4che依赖-->
<dependency>
<groupId>org.dcm4che</groupId>
<artifactId>dcm4che-imageio</artifactId>
<version>5.3.3</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/dcm4che-imageio-3.3.3-SNAPSHOT.jar</systemPath>
</dependency>
<!--dcm4che依赖-->
<dependency>
<groupId>org.dcm4che</groupId>
<artifactId>dcm4che-core</artifactId>
<version>5.3.3</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/dcm4che-core-3.3.3-SNAPSHOT.jar</systemPath>
</dependency>
3.第一种代码实现
- 创建Dcm2jpgIOStreamOutput 类
package com.nwpusct.csal.common.util;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import org.dcm4che3.data.Attributes;
import org.dcm4che3.imageio.plugins.dcm.DicomImageReadParam;
import org.dcm4che3.util.SafeClose;
import javax.imageio.ImageIO;
import javax.imageio.ImageReadParam;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.Iterator;
/**
* @ProjectName DatagoSecurityTest-812
* @Package com.nwpusct.csal.common.util
* @Name Dcm2jpgIOStreamOutput
* @Author HB
* @Date 2021/11/2 16:21
* @Version 1.0
*/
public class Dcm2jpgIOStreamOutput {
private final ImageReader imageReader = ImageIO.getImageReadersByFormatName("DICOM").next();
private float windowCenter;
private float windowWidth;
private boolean autoWindowing = true;
private int windowIndex;
private int voiLUTIndex;
private boolean preferWindow = true;
private Attributes prState;
private int overlayActivationMask = 0xffff;
private int overlayGrayscaleValue = 0xffff;
private int frame = 1;
public void convert(File src, File dest) throws IOException {
Iterator<ImageReader> iter = ImageIO.getImageReadersByFormatName("DICOM");
ImageReader reader = iter.next();
ImageInputStream iis = ImageIO.createImageInputStream(src);
BufferedImage bi;
OutputStream out = null;
try{
reader.setInput(iis, false);
bi = readImage(iis);
if (bi == null) {
System.out.println("\nError: " + src + " - couldn't read!");
return;
}
out = new BufferedOutputStream(new FileOutputStream(dest));
JPEGImageEncoder enc = JPEGCodec.createJPEGEncoder(out); //这里也可以使用流将图像导出到web应用,用来搭建web版的PACS等。
enc.encode(bi);
}finally{
SafeClose.close(iis);
SafeClose.close(out);
}
}
private ImageReadParam readParam(){
DicomImageReadParam param = (DicomImageReadParam) imageReader.getDefaultReadParam();
param.setWindowCenter(windowCenter);
param.setWindowWidth(windowWidth);
param.setAutoWindowing(autoWindowing);
param.setWindowIndex(windowIndex);
param.setVOILUTIndex(voiLUTIndex);
param.setPreferWindow(preferWindow);
param.setPresentationState(prState);
param.setOverlayActivationMask(overlayActivationMask);
param.setOverlayGrayscaleValue(overlayGrayscaleValue);
return param;
}
private BufferedImage readImage(ImageInputStream iis) throws IOException{
imageReader.setInput(iis);
return imageReader.read(frame -1, readParam());
}
}
- 转换实现
- 第一种实现转换
public static void main(String[] args) throws IOException {
try {
File dcmFile = new File("....\\IMAGE002.dcm"); //dcm所在路径
File imageFile = new File("......\\IMAGE002.jpeg");//需要转化图像的路径
Dcm2jpgIOStreamOutput dcm2jpg = new Dcm2jpgIOStreamOutput();
dcm2jpg.convert(dcmFile, imageFile);
} catch (Exception e) {
e.printStackTrace();
}
}
- 第二种实现
public static void main(String[] args) throws IOException {
try {
File dcmFile = new File("....\\IMAGE002.dcm"); //dcm路径
Dcm2Jpg dcm2Jpg = new Dcm2Jpg();
dcm2Jpg.initImageWriter("JPEG", null, null, null, 0);
File imageFile = new File(".....\\IMAGE002.png");//图像路径
dcm2Jpg.convert(dcmFile, imageFile);
} catch (Exception e) {
e.printStackTrace();
}
}
4.需要测试使用的朋友们资料已经给你们准备好了
我用阿里云盘分享了「dcm文件」,你可以不限速下载🚀
复制这段内容打开「阿里云盘」App 即可获取
链接:https://www.aliyundrive.com/s/2W5gehzKRou
5.最后由于dcm4che所有包大,无法进行分享,请需要其它dcm4che包私信留言。