近期业务部门要求将heic文件转成jpg文件格式,刚开始使用了各种ImageReader都不可以,后来接触ImageMagick后,发现可以中间也踩了一些坑,现在做一下记录踩过的那些坑。
1、首先需要做的准备工作--下载ImageMagick和org.im4java的插件
ImageMagick下载页面:ImageMagick – Download
下载这个版本
org.im4java的pom文件依赖包
<dependency> <groupId>org.im4java</groupId> <artifactId>im4java</artifactId> <version>1.4.0</version> </dependency>
2、安装ImageMagick
安装7.0以后的版本会自动配置环境变量,如果安装过程中遇到有这个选项要打上勾,还有安装目录中间不要有中文和空格,笔者第一次安装的时候安装目录在D:\Program Files (x86) 这样的目录结构上,发现程序会一直报这个异常,说明im4java命令找不到imagemagick的引擎文件。
org.im4java.core.CommandException: java.io.FileNotFoundException: convert
at org.im4java.core.ImageCommand.run(ImageCommand.java:219)
3、功能开发
private static final String IMAGE_MAGICK_PATH = "D:/msgic/ImageMagick-7.1.0-Q16-HDRI";
private static final String SOURCE_PATH="D:/WeChat/WeChat Files/wxid_8386643866212/FileStorage/File/2022-10/1/1";
private static final String TARGET_PATH="D:/WeChat/WeChat Files/wxid_8386643866212/FileStorage/File/2022-10/1/1";
public static void main(String[] args) {
ProcessStarter.setGlobalSearchPath(IMAGE_MAGICK_PATH);
File dir = new File(SOURCE_PATH);
File[] dirFiles = dir.listFiles();
for(File file:dirFiles){
try {
IMOperation op = new IMOperation();
//op.resize(400,400);
op.addImage(file.getPath());
op.negate();
File outFile=new File(TARGET_PATH+File.separator+getFolderName(file.getName())+".jpg");
op.addImage(outFile.getPath());
//启动
ConvertCmd cmd = new ConvertCmd();
cmd.setSearchPath(IMAGE_MAGICK_PATH);
cmd.run(op);
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (IM4JavaException e) {
e.printStackTrace();
}
}
}
public static String getFolderName(String fileName) {
if(StringUtils.isEmpty(fileName)){
return null;
}
if(fileName.lastIndexOf(".") != -1 && fileName.lastIndexOf(".") != 0){
return fileName.substring(0,fileName.lastIndexOf("."));
}
return null;
}
完美实现功能