码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 踩坑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. }

    完美实现功能

  • 相关阅读:
    Golang入门笔记(4)—— 流程控制之if分支
    java-net-php-python-ssm二手商品交易平台的设计与实现(2)计算机毕业设计程序
    缺氧诱导因子 HIF在细胞代谢中的作用
    CEPH-1:ceph-deploy离线部署ceph集群及报错解决FAQ
    SKG 渠道中台借助 SAE + 大禹打造云原生 DevOPS,提效 60%
    【数据结构基础_字符串】Leetcode 409.最长回文串
    制造工厂生产线液晶电子看板显示终端
    Java精进-20分钟学会mybatis使用
    P1090 [NOIP2004 提高组] 合并果子【堆、贪心】
    海思和Sigmastar ISP开发异同点
  • 原文地址:https://blog.csdn.net/x4789508a/article/details/127545604
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号