这里以下载 window 版本为例:
关于Q8,Q16的说明:
Q8表示: 8-bits per pixel quantum
Q16表示:16-bits per pixel quantum
使用16-bit在处理图片时比8-bit慢15%至50%,并须要更多的内存。比如处理一张1024x768像素的图片8-bit要使用3.6M内存,16-bit要使用7.2M内存。
计算方法是: (5 * Quantum Depth * Rows * Columns) / 8
8-bit可表示0-255种值,16-bit可表示0-65535种值。默认值是8-bit。大多数电脑显示使用8-bit per pixel quantums。现代数码相机照的相片,每一种颜色就是8位深,3种颜色就是24位,选Q8的话也可以满足使用要求,同时可节省计算机资源。
这里我们选择下载官方推荐的文件,也就是第一个:
下载完成得到一个exe执行文件:
进行安装(一直点下一步即可)。
测试 imageMagick 是否安装成功,可以使用命令将emf文件转为png
在maven中添加依赖
<dependency>
<groupId>org.im4java</groupId>
<artifactId>im4java</artifactId>
<version>1.4.0</version>
</dependency>
import org.im4java.core.ConvertCmd;
import org.im4java.core.IM4JavaException;
import org.im4java.core.IMOperation;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
public class ImageMagickConvertTest {
//imageMagick安装位置
final static String imageMagickLocation = "D:\\ImageMagick\\ImageMagick-7.1.1-Q16-HDRI";
public static void main(String arg[]) throws InterruptedException, IOException, IM4JavaException {
//需要转换的emf文件
String inputFile = "D:\\emf\\test.emf";
File file = new File(inputFile);
if(!file.exists()) {
throw new FileNotFoundException("文件不存在");
}
//转换为png存储的位置和名称
String output = "D:\\emf\\";
String currentTime = getCurrentTime();
output += currentTime + "-png.png";
IMOperation op = new IMOperation();
op.addImage(inputFile);
op.addImage(output);
convert(op);
}
/**
* 转换
* @param op
*/
public static void convert(IMOperation op) {
try{
ConvertCmd convert = new ConvertCmd();
convert.setSearchPath(imageMagickLocation);
convert.run(op);
} catch(Exception e) {
e.printStackTrace();
}
}
private static String getCurrentTime() {
// 获取当前时间
LocalTime currentTime = LocalTime.now();
// 定义时间格式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HHmmss");
// 格式化时间为字符串
String formattedTime = currentTime.format(formatter);
return formattedTime;
}
}
我用的ImageMagick版本是ImageMagick-7.1.1-24-Q16-HDRI-x64-dll.exe,安装完后发现安装目录里只有个 magick.exe 命令。程序里直接使用 convert 的时候都会报错,提示文件找不到。新版本使用这些命令必须先写上 magick 命令才行,比如这样 magick convert xxxx。原因可能是ImageMagick版本更新了,但是Im4java版本没更新(Im4java版本是1.4.0),导致出现不兼容的情况,解决办法很简单,直接把 magick.exe 复制一份,重命名为convert命令就可以了,实测可用。