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

浙公网安备 33010602011771号