Heic文件转jpg标准解决方案(libheif安装)

绪论

Heic文件转jpg纯java实现一文中说明了libheif是解决heic转jpg的唯一标准答案。由于我的操作系统是centos7,默认的yum仓库里面的rpm包版本都是低于1.6的,不能支持heic的高级特性。所以本文将直接从源码打包安装libheif。

1.安装gcc 11

由于libheif库需要的版本为gcc 11以上,所以需要先安装gcc。

1.1 安装 SCL (Software Collections)

sh 复制代码
yum install -y centos-release-scl centos-release-scl-rh
sudo yum-config-manager --add-repo=https://vault.centos.org/7.9.2009/sclo/x86_64/rh/
sudo yum-config-manager --enable sclo-rh

1.2 修改仓库默认地址

sh 复制代码
vi /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo

改成

复制代码
#mirrorlist=http://mirrorlist.centos.org?arch=$basearch&release=7&repo=sclo-rh
baseurl=http://vault.centos.org/7.9.2009/sclo/$basearch/rh/
sh 复制代码
vi /etc/yum.repos.d/CentOS-SCLo-scl.repo(如果为空可以不改)

改成

复制代码
#mirrorlist=http://mirrorlist.centos.org?arch=$basearch&release=7&repo=sclo-sclo
baseurl=http://vault.centos.org/7.9.2009/sclo/$basearch/sclo/

重构缓存

sh 复制代码
yum clean all
yum makecache

1.3 安装gcc

sh 复制代码
yum install -y devtoolset-11-gcc devtoolset-11-gcc-c++

1.4 执行scl

sh 复制代码
scl enable devtoolset-11 bash
which gcc

2.安装libde265

2.1 下载源码包

sh 复制代码
wget https://github.com/strukturag/libde265/archive/refs/tags/v1.0.12.tar.gz
tar -zxvf v1.0.12.tar.gz
cd libde265-1.0.12

2.2 新建build文件

打开libde265源码目录

sh 复制代码
mkdir build
cd build

2.3 编译(目录放在/data01/libde265_install下,后面libheif安装会用)

这里cmake我是无网安装的,使用的绝对路径

sh 复制代码
/data01/cmake-3.31.11/bin/cmake  .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/data01/libde265_install

2.4 打包 & 安装

sh 复制代码
make
make install

3.安装libheif

3.1 下载源码包

sh 复制代码
# 下载源码包(需要大于1.18.0才能支持新特性)
wget https://github.com/strukturag/libheif/archive/refs/tags/v1.20.0.tar.gz

# 解压
tar -zxvf v1.17.0.tar.gz
cd libheif-1.17.0

3.2 新建build文件

打开libheif源码目录

sh 复制代码
mkdir build
cd build

3.3 安装依赖包(cmake可以直接源码安装)

sh 复制代码
yum install cmake git pkgconfig zlib-devel libjpeg-turbo-devel libpng-devel \
    libtiff-devel openjpeg2-devel -y

3.4 编译

sh 复制代码
/data01/cmake-3.31.11/bin/cmake \
  -DCMAKE_INSTALL_PREFIX=/data01/lib_install \
  -DCMAKE_PREFIX_PATH=/data01/lib_install \
  -DCMAKE_C_COMPILER=/opt/rh/devtoolset-11/root/usr/bin/gcc \
  -DCMAKE_CXX_COMPILER=/opt/rh/devtoolset-11/root/usr/bin/g++ \
  -DCMAKE_CXX_STANDARD=20 \
  -DCMAKE_CXX_STANDARD_REQUIRED=ON \
  -DENABLE_EXAMPLES=OFF \
  -DENABLE_TESTS=OFF \
  -DENABLE_TOOLS=ON \
  -DLIBDE265_ROOT=/data01/libde265_install \
  -DX265_ROOT=/data01/libde265_install \
  -DAOM_ROOT=/data01/lib_install \
  -DPNG_PNG_INCLUDE_DIR=/usr/include \
  -DPNG_LIBRARY=/usr/lib64/libpng.so \
  -DJPEG_INCLUDE_DIR=/usr/include \
  -DJPEG_LIBRARY=/usr/lib64/libjpeg.so \
  ..

其中DLIBDE265_ROOT为前面libde265的安装位置

3.5 打包 & 安装

sh 复制代码
make 
make install 

3.6 拷贝lib265的so文件到libheif下面

主要是让libheif的bin文件能够访问到libde265的lib库

sh 复制代码
cp /data01/libde265_install/lib64/libde265.so libde265.so

4.执行命令(转换命令)

sh 复制代码
LD_LIBRARY_PATH=/data01/lib_install/lib64 /data01/lib_install/bin/heif-convert /data01/2.heic /data01/22_2.jpg

5.二进制文件使用

5.1 修改docker file 安装依赖文件

sh 复制代码
yum install cmake git pkgconfig zlib-devel libjpeg-turbo-devel libpng-devel \
    libtiff-devel openjpeg2-devel -y

5.2 拷贝二进制包到/data01

5.3 执行命令

sh 复制代码
LD_LIBRARY_PATH=/data01/lib_install/lib64 /data01/lib_install/bin/heif-convert /data01/2.heic /data01/22_2.jpg
相关推荐
NE_STOP3 小时前
MyBatis-配置文件解读及MyBatis为何不用编写Mapper接口的实现类
java
有道AI情报局5 小时前
网易有道龙虾 NAS 服务器部署与实战指南
github
徐小夕6 小时前
JitWord 2.3: 墨定,行远
前端·vue.js·github
后端AI实验室8 小时前
用AI写代码,我差点把漏洞发上线:血泪总结的10个教训
java·ai
CoovallyAIHub9 小时前
实时视觉AI智能体框架来了!Vision Agents 狂揽7K Star,延迟低至30ms,YOLO+Gemini实时联动!
算法·架构·github
CoovallyAIHub9 小时前
开源:YOLO最强对手?D-FINE目标检测与实例分割框架深度解析
人工智能·算法·github
程序员清风10 小时前
小红书二面:Spring Boot的单例模式是如何实现的?
java·后端·面试
ZengLiangYi10 小时前
写了个脚本,把 Gitee/GitLab 仓库一键批量迁移到 GitHub
github
belhomme10 小时前
(面试题)Redis实现 IP 维度滑动窗口限流实践
java·面试
CoovallyAIHub10 小时前
OpenClaw:从“19万星标”到“行业封杀”,这只“赛博龙虾”究竟触动了谁的神经?
算法·架构·github