喵星之旅-狂奔的兔子-使用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基本隨便百度搜索就能解決了。

 

 

代碼地址:

 

svn://47.105.188.20/kitty/2、code/bunny_dcmtool  用戶名密碼: reader reader

 

 

只需要一個主文件即可:

 

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/" 是轉換后文件所在目錄。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM