jdk使用的是1.8
开发工具使用的是idea
最初使用dcm4che2时报错 Unsupported JPEG process: SOF type 0xc3
后改为dcm4che3,就没出现这个错误.
程序运行时,报错 no opencv_java in java.library.path
提示找不到opencv_java这个文件,
Linux和Windows,是将这个文件放进,jdk/jre/lib/amd64/目录下
Mac电脑:
可以将文件放进下面两个目录其中一个就行
/System/Library/Java/Extensions
/Library/Java/Extensions
网上也有说jdk中需要加两个依赖包:
jai_imageio-1.2-pre-dr-b04.jar
clibwrapper_jiio-1.2-pre-dr-b04.jar
放在jdk/jre/lib/ext/目录下
注:可能系统环境不同,我这是在程序打包时这两个jar已经在程序内了,所以我没有用到这一步
import org.dcm4che3.util.SafeClose;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.OutputStream;
import java.util.Arrays;
import java.util.Iterator;
public class Dcm4che2Jpg {
public static void main(String[] args) {
String srcPath = "/xxx/xxx.dcm";
String outPath = "/xxx/xxx.jpeg";
if (args.length >= 2) {
srcPath = args[0];
outPath = args[1];
}
System.out.println("开始执行: 输入文件: "+srcPath);
dcm2Jpg(srcPath, outPath);
System.out.println("执行完成: 输出文件: "+outPath);
}
public static boolean dcm2Jpg(String dcmFilePath, String target) {
Iterator<ImageReader> imageReadersByFormatName = ImageIO.getImageReadersByFormatName("DICOM");
ImageReader imageReader = imageReadersByFormatName.next();
File dcmFile = new File(dcmFilePath);
File targetFile = new File(target);
ImageInputStream iis = null;
BufferedImage bi = null;
OutputStream out = null;
try {
iis = ImageIO.createImageInputStream(dcmFile);
imageReader.setInput(iis, false);
bi = imageReader.read(0);
ImageIO.write(bi, "jpg", targetFile);
return true;
} catch (Exception e) {
e.printStackTrace();
}finally {
SafeClose.close(iis);
SafeClose.close(out);
}
return false;
}
}