how to covert heif to jpg with java

说明

主要尝试了Nokia开源的 https://github.com/nokiatech/heif    和   ImageMagick&&im4java 结合 这两种方式。

(1).  heif 这块c++编译好了so包和jar之后, 如何用java代码将heic图片转成jpg、png 没有明确说明,参考例子尝试多次之后只能放弃,有兴趣的童鞋可以去试试

(2).  ImageMagick&&im4java  主要是linux环境下各种动态库编译容易出错,经过多次尝试找到一种方式下面会做介绍

   

下面主要分windows和linux两种环境来讲:

1. windows

这个比较简单,我这里用的是win7 64位,jdk1.8 , 参考的是这位兄弟开源的:  https://github.com/yanzhonghui/HEIC-Convert-Java

安装好ImageMagick,本地引入依赖的 im4java-1.4.0.jar 就行了。jar上面兄弟开源的github里面都有。

如果想自己编译打包的可以去im4java 官网:  http://im4java.sourceforge.net/docs/dev-guide.html

 

2. linux 

(1). ImageMagick安装

依赖库安装:

wget https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm --no-check-certificate

rpm -Uvh rpmfusion-free-release*rpm

 

需要支持jpg、png文件格式的需要额外安装

yum install  libjpeg-devel libpng-devel

 

需要支持heic文件格式的需要额外安装

安装libheif 

yum install libheif

yum install libheif-devel-1.3.2-2.el7.x86_64.rpm

 

编译ImageMagick  

这里用的是最新版本: 7.1.0-19 , 下载地址: https://download.imagemagick.org/ImageMagick/download/

  • cd ImageMagick-7.1.0-19
  • ./configure  --prefix=/usr/local/imagemagick  --with-heic=yes --with-jpeg=yes  --with-png=yes        //需要支持的图片格式记得带上这里是heic、jpg、png
  • make
  • make install

(3).  代码

import org.im4java.core.ConvertCmd;
import org.im4java.core.IM4JavaException;
import org.im4java.core.IMOperation;
import java.io.IOException;
public class ImageTool31 {

    private static final String IMAGE_MAGICK_PATH = "D:\\tools\\ImageMagick-7.1.0-Q16-HDRI";

    public static void main(String[] args) {

        ConvertCmd cmd = new ConvertCmd();
        //  windows下才需要设置imageMagick安装地址
        //  cmd.setSearchPath(IMAGE_MAGICK_PATH);

        IMOperation op = new IMOperation();
        op.addImage("/home/linux//demo/20211223.heic");
        op.addImage("/home/linux//demo/20220120-1.jpg");

        try {
            cmd.run(op);
        } catch (IOException | InterruptedException | IM4JavaException e) {
            e.printStackTrace();
        }

    }

}

  

   常见错误

    1.  convert: no decode delegate for this image format `PNG' @ error/constitute.c/ReadImage/572.

         我这边主要是因为ImageMagick  configure的时候没有带上 --with-png=yes  导致ImageMagick找不到 png deceode

          

 

posted @ 2022-01-21 14:44  凌山雪峰  阅读(2315)  评论(0)    收藏  举报