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


    近期业务部门要求将heic文件转成jpg文件格式,刚开始使用了各种ImageReader都不可以,后来接触ImageMagick后,发现可以中间也踩了一些坑,现在做一下记录踩过的那些坑。

    1、首先需要做的准备工作--下载ImageMagick和org.im4java的插件

    ImageMagick下载页面:ImageMagick – Download

    下载这个版本 

    org.im4java的pom文件依赖包

    
        org.im4java
        im4java
        1.4.0
    

    2、安装ImageMagick

     

    安装7.0以后的版本会自动配置环境变量,如果安装过程中遇到有这个选项要打上勾,还有安装目录中间不要有中文和空格,笔者第一次安装的时候安装目录在D:\Program Files (x86) 这样的目录结构上,发现程序会一直报这个异常,说明im4java命令找不到imagemagick的引擎文件。

    1. org.im4java.core.CommandException: java.io.FileNotFoundException: convert
    2.     at org.im4java.core.ImageCommand.run(ImageCommand.java:219)

    3、功能开发

    1. private static final String IMAGE_MAGICK_PATH = "D:/msgic/ImageMagick-7.1.0-Q16-HDRI";
    2. private static final String SOURCE_PATH="D:/WeChat/WeChat Files/wxid_8386643866212/FileStorage/File/2022-10/1/1";
    3. private static final String TARGET_PATH="D:/WeChat/WeChat Files/wxid_8386643866212/FileStorage/File/2022-10/1/1";
    4. public static void main(String[] args) {
    5. ProcessStarter.setGlobalSearchPath(IMAGE_MAGICK_PATH);
    6. File dir = new File(SOURCE_PATH);
    7. File[] dirFiles = dir.listFiles();
    8. for(File file:dirFiles){
    9. try {
    10. IMOperation op = new IMOperation();
    11. //op.resize(400,400);
    12. op.addImage(file.getPath());
    13. op.negate();
    14. File outFile=new File(TARGET_PATH+File.separator+getFolderName(file.getName())+".jpg");
    15. op.addImage(outFile.getPath());
    16. //启动
    17. ConvertCmd cmd = new ConvertCmd();
    18. cmd.setSearchPath(IMAGE_MAGICK_PATH);
    19. cmd.run(op);
    20. } catch (IOException e) {
    21. e.printStackTrace();
    22. } catch (InterruptedException e) {
    23. e.printStackTrace();
    24. } catch (IM4JavaException e) {
    25. e.printStackTrace();
    26. }
    27. }
    28. }
    29. public static String getFolderName(String fileName) {
    30. if(StringUtils.isEmpty(fileName)){
    31. return null;
    32. }
    33. if(fileName.lastIndexOf(".") != -1 && fileName.lastIndexOf(".") != 0){
    34. return fileName.substring(0,fileName.lastIndexOf("."));
    35. }
    36. return null;
    37. }

    完美实现功能

  • 相关阅读:
    深入解析Flutter下一代渲染引擎Impeller
    TCP/IP Illustrated Episode 10
    webService接口
    SpringAOP是什么?为什么要有SpringAOP?
    基于STM32的步进电机驱动设计( 含源码 )
    buildAdmin 后端控制器的代码分析
    新手python的自学总结(已拿到百度offer)
    MySQL:索引的底层实现 | 聚集索引和非聚集索引 | 自适应哈希索引
    基于 ceph-deploy 部署 Ceph 集群 超详细
    docker的简介--安装--操作命令
  • 原文地址:https://blog.csdn.net/x4789508a/article/details/127545604