參考1 JAVA代碼實現DICOM文件轉換JPG
package com.example;import java.awt.image.BufferedImage;
import java.io.File;import javax.imageio.ImageIO;import ij.plugin.DICOM;/*** dicom文件java解析,生成圖片* 不過這里不能解析壓縮的dicom文件*/
public class ImageDemo {public static void main(String args[]) {
// create("test1.dcm"); //在本地目錄生成test1.dcm.jpg圖片文件create2("D:\\dicom\\test3.dcm"); //在電腦dicom文件夾下生成test1.dcm.jpg圖片文件}/*** 根據dicom文件生成jpg圖片* <p/>* 這里輸入的是image文件夾的dicom文件名字,* 運行即可得到一個jpg圖片,顯示的是dicom里面的圖形*/private static void create(String fileName) {try {String projectPath = System.getProperty("user.dir");//Check class DICOMDICOM dicom = new DICOM();String imagePath = projectPath + "\\image\\" + fileName;dicom.run(imagePath);BufferedImage bi = (BufferedImage) dicom.getImage();int width = bi.getWidth();int height = dicom.getHeight();System.out.println("width: " + width + "\n" + "height: " + height);imagePath = projectPath + "\\image\\" + fileName + ".jpg";ImageIO.write(bi, "jpg", new File(imagePath));System.out.println("Hehe,Game over!!!");} catch (Exception e) {System.out.println("錯誤" + e.getMessage());}}/*** 輸入一個dicom文件的絕對路徑和名字* 獲取一個jpg文件*/private static void create2(String filePath) {try {DICOM dicom = new DICOM();dicom.run(filePath);BufferedImage bi = (BufferedImage) dicom.getImage();int width = bi.getWidth();int height = dicom.getHeight();System.out.println("width: " + width + "\n" + "height: " + height);String imagePath = filePath + ".jpg";ImageIO.write(bi, "jpg", new File(imagePath));System.out.println("Hehe,Game over!!!");} catch (Exception e) {System.out.println("錯誤" + e.getMessage());}}
}
參考2 使用java實現dcm文件轉jpg
由于相關的jar基本直接搞不到,需要自己編譯jar。這里提供直接帶有jar的項目,免去編譯問題,很多時候編譯失敗。
jar一共需要4個:
dcm4che-core-5.20.0.jar
dcm4che-imageio-5.20.0.jar
dcm4che-image-5.20.0.jar
slf4j-api-1.7.30.jar
如果能拿到這幾個jar基本隨便百度搜索就能解決了。
只需要一個主文件即可:
package club.kittybunny.tool.dcmfile;
import org.dcm4che3.data.Attributes;
import org.dcm4che3.imageio.plugins.dcm.DicomImageReadParam;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.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;public class Dcm2Jpg2 {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;
/*** 通過制定源文件目錄和目標文件目錄,實現dcm轉jpg格式* @param args* @throws Exception*/public static void main(String[] args) throws Exception {//源文件加目錄全路徑,結尾用/結束,只處理里面dcm格式文件 ,例如"/home/bunny/桌面/src/"String src = "/home/bunny/Downloads/qq-files/1023354682/file_recv/3000566.000000-03192/";//目標路徑全路徑,將源文件加內所有dcm文件轉換為同名jpg文件,使用/結束,;例如 "/home/bunny/桌面/w/dcm/"String out = "/home/bunny/桌面/w/dcm/";if (args.length >= 2) {src = args[0];out = args[1];}File f = new File(src);//讀取到所有文件名String[] arr = f.list();for (int i = 0; i < arr.length; i++) {//篩選符合條件的文件處理if (arr[i].endsWith(".dcm")) {InputStream in = new FileInputStream(src + arr[i]);ByteArrayOutputStream byteArrayOutputStream = new Dcm2Jpg2().convert(in, null);FileOutputStream fileOutputStream = null;try {fileOutputStream = new FileOutputStream(out + arr[i].substring(0, arr[i].lastIndexOf("."))+".jpg");fileOutputStream.write(byteArrayOutputStream.toByteArray());} catch (IOException e) {e.printStackTrace();}}}}/*** * 實現單文件的dcm轉jpg* @param src dcm文件流* @param name oss的getFileName* @throws Exception*/public ByteArrayOutputStream convert(InputStream src, String name) throws Exception {Iterator<ImageReader> iter = ImageIO.getImageReadersByFormatName("DICOM");ImageReader reader = iter.next();try (ImageInputStream iis = ImageIO.createImageInputStream(src)) {reader.setInput(iis, false);BufferedImage bi = readImage(iis);if (bi == null) {throw new Exception("無法讀取到圖片");}ByteArrayOutputStream os = new ByteArrayOutputStream();ImageIO.write(bi, "jpg", os);return os;} catch (IOException e) {e.printStackTrace();return null;}}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());}
}
附帶可執行jar的說明文件:
先將需要轉換的dcm文件統一放到一個文件夾內,然后創建轉換后文件的文件夾,文件夾全路徑不能有空格。
執行命令例如:
java -jar dcm2jpg.jar /home/bunny/Downloads/qq-files/1023354682/file_recv/3000566.000000-03192/ /home/bunny/桌面/w/new/
其中第一個參數是源文件所在目錄。
第二個參數是轉換后文件艘在目錄。
所有目錄需要“/”結尾。
上面示例,命令中
"/home/bunny/Downloads/qq-files/1023354682/file_recv/3000566.000000-03192/"是原文件所在目錄;
“/home/bunny/桌面/w/new/” 是轉換后文件所在目錄。
參考3 java解析dcm文件到jpg
1、下載源碼編譯
下載dcm3che源碼
mvn install
2、gradle/maven 引用
compile (‘org.dcm4che.tool:dcm4che-tool-dcm2jpg:5.20.0’){
exclude group: ‘org.slf4j’,module: ‘slf4j-log4j12’
}
3、編寫工具類
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.dcm4che3.data.Attributes;
import org.dcm4che3.imageio.plugins.dcm.DicomImageReadParam;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.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;/*** dcm轉jpg工具** @author zhy*/
@Setter
@Slf4j
public class Dcm2jpgUtil {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;/*** 解析dcm獲取圖片并上傳oss** @param src dcm文件流* @param name oss的getFileName*/public void convert(InputStream src, String name) {Iterator<ImageReader> iter = ImageIO.getImageReadersByFormatName("DICOM");ImageReader reader = iter.next();try (ImageInputStream iis = ImageIO.createImageInputStream(src)) {reader.setInput(iis, false);BufferedImage bi = readImage(iis);if (bi == null) {throw new 自定義異常("無法讀取到圖片");}ByteArrayOutputStream os = new ByteArrayOutputStream();ImageIO.write(bi, "jpg", os);//上傳到ossOssUtil.uploadByInputStream(new ByteArrayInputStream(os.toByteArray()), name);} catch (IOException e) {log.error(e.getMessage(), e);}}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());}
}
參考4 java代碼使用ImageJ解析dicom文件成圖片
Dicom全稱是醫學數字圖像與通訊,這里講java解析diocm格式文件變成jpg示例。
這里的代碼只能解析普通的dicom文件成jpg圖片,對于壓縮的dicom文件是沒有辦法解析的!
ImageJ解析代碼很簡單,但是要導入ImageJ的jar包。
從第一個圖片可以看到lib中導入了ij.jar,這就是ImageJ的jar包,下面那個zip是source文件,這樣就可以看到ImageJ里面的源碼。
下面是調用ImageJ的代碼:
import ij.plugin.DICOM;import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;/*** dicom文件java解析,生成圖片* 不過這里不能解析壓縮的dicom文件*/
public class ImageDemo {public static void main(String args[]) {
// create("test1.dcm"); //在本地目錄生成test1.dcm.jpg圖片文件create2("D:\\dicom\\test3.dcm"); //在電腦dicom文件夾下生成test1.dcm.jpg圖片文件}/*** 根據dicom文件生成jpg圖片* <p/>* 這里輸入的是image文件夾的dicom文件名字,* 運行即可得到一個jpg圖片,顯示的是dicom里面的圖形*/private static void create(String fileName) {try {String projectPath = System.getProperty("user.dir");//Check class DICOMDICOM dicom = new DICOM();String imagePath = projectPath + "\\image\\" + fileName;dicom.run(imagePath);BufferedImage bi = (BufferedImage) dicom.getImage();int width = bi.getWidth();int height = dicom.getHeight();System.out.println("width: " + width + "\n" + "height: " + height);imagePath = projectPath + "\\image\\" + fileName + ".jpg";ImageIO.write(bi, "jpg", new File(imagePath));System.out.println("Hehe,Game over!!!");} catch (Exception e) {System.out.println("錯誤" + e.getMessage());}}/*** 輸入一個dicom文件的絕對路徑和名字* 獲取一個jpg文件*/private static void create2(String filePath) {try {DICOM dicom = new DICOM();dicom.run(filePath);BufferedImage bi = (BufferedImage) dicom.getImage();int width = bi.getWidth();int height = dicom.getHeight();System.out.println("width: " + width + "\n" + "height: " + height);String imagePath = filePath + ".jpg";ImageIO.write(bi, "jpg", new File(imagePath));System.out.println("Hehe,Game over!!!");} catch (Exception e) {System.out.println("錯誤" + e.getMessage());}}
}
參考5 lj.jar
#ImageJ解析dicom文件成jpg圖片 Dicom全稱是醫學數字圖像與通訊,這里講java解析diocm格式文件變成jpg示例。 這里的代碼只能解析普通的dicom文件成jpg圖片,對于壓縮的dicom文件是沒有辦法解析的!
ImageJ解析代碼很簡單,但是要導入ImageJ的jar包。 從第一個圖片可以看到lib中導入了ij.jar,這就是ImageJ的jar包,下面那個zip是source文件,這樣就可以看到ImageJ里面的源碼。
下面是調用ImageJ的代碼:
import ij.plugin.DICOM;import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;/*** dicom文件java解析,生成圖片* 不過這里不能解析壓縮的dicom文件*/
public class ImageDemo {public static void main(String args[]) {
// create("test1.dcm"); //在本地目錄生成test1.dcm.jpg圖片文件create2("D:\\dicom\\test3.dcm"); //在電腦dicom文件夾下生成test1.dcm.jpg圖片文件}/*** 根據dicom文件生成jpg圖片* <p/>* 這里輸入的是image文件夾的dicom文件名字,* 運行即可得到一個jpg圖片,顯示的是dicom里面的圖形*/private static void create(String fileName) {try {String projectPath = System.getProperty("user.dir");//Check class DICOMDICOM dicom = new DICOM();String imagePath = projectPath + "\\image\\" + fileName;dicom.run(imagePath);BufferedImage bi = (BufferedImage) dicom.getImage();int width = bi.getWidth();int height = dicom.getHeight();System.out.println("width: " + width + "\n" + "height: " + height);imagePath = projectPath + "\\image\\" + fileName + ".jpg";ImageIO.write(bi, "jpg", new File(imagePath));System.out.println("Hehe,Game over!!!");} catch (Exception e) {System.out.println("錯誤" + e.getMessage());}}/*** 輸入一個dicom文件的絕對路徑和名字* 獲取一個jpg文件*/private static void create2(String filePath) {try {DICOM dicom = new DICOM();dicom.run(filePath);BufferedImage bi = (BufferedImage) dicom.getImage();int width = bi.getWidth();int height = dicom.getHeight();System.out.println("width: " + width + "\n" + "height: " + height);String imagePath = filePath + ".jpg";ImageIO.write(bi, "jpg", new File(imagePath));System.out.println("Hehe,Game over!!!");} catch (Exception e) {System.out.println("錯誤" + e.getMessage());}}
}