踩坑ImageMagick将ios图片文件HEIC格式转jpg/png等

近期业务部门要求将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;
    }

完美实现功能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力终会有回报

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值