在Kubuntu 22.04上查看HEIF图像

介绍

HEIF是目前智能手机上常见的高效图片格式。KDE Framework 5.80.0正式支持了HEIF格式图像,但不知为何,开发者在编译相关的支持库时没有打开HEIF支持选项,导致目前最新的Kubuntu仍然无法打开HEIF图像。本文提供一种手动编译安装kimageformat-plugins库的方法,来使KDE下默认的图片查看器Gwenview支持HEIF图像。

步骤

下面的步骤需要使用Ubuntu的源代码仓库。如果你换过apt的软件源,它可能会默认禁用源代码仓库。笔者使用的清华大学开源镜像站的Ubuntu源就默认禁用了源代码仓库。为了启用源代码仓库,请编辑/etc/apt/sources.list文件(需要root权限)。

以清华源为例,编辑前的文件内容是:

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse

仅需取消第一个注释即可:

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse

取消注释后,保存退出,执行sudo apt update来更新软件源缓存。

在文件系统中随便找一个位置,新建一个脚本文件,随便取一个名字,比如temp.sh,编辑并输入以下内容:

mkdir temp_build_dir
cd !$
apt-get source kimageformats
cd kimageformats-*

sudo apt install libheif-dev
sudo apt build-dep kimageformats

echo -e '
override_dh_auto_configure:
	dh_auto_configure --buildsystem=kf5 -O--buildsystem=kf5 -- -DKIMAGEFORMATS_HEIF=ON
' >> debian/rules

sudo debuild -b -uc -us

sudo dpkg -i ../kimageformat-plugins_*_amd64.deb

注意以dh_auto_configure开头的行的行首应该是一个Tab符号(\t),不能是空格,否则会报错。如果你直接从这里复制,你使用的编辑器可能会默认地将\t转换为若干个空格(笔者使用的Kate确实这样做了)。

保存退出,执行

chmod +x temp.sh

来为你刚刚编辑的脚本添加可执行权限。

然后执行它:

./temp.sh

如果你使用的确实是Kubuntu 22.04,那么编译时可能会提示缺少两个库。安装它们需要手动添加一个软件源,在网络搜索它们可以找到安装的详细方法。

如果系统提示找不到debuild这个命令,可以在终端输入debuild,回车,bash将提示你这条命令来自哪个软件包,使用apt手动安装即可。

如果一切正常,上面的脚本文件的最后三行输出应该像下面这样:

...
准备解压 .../kimageformat-plugins_5.92.0-0ubuntu1_amd64.deb  ...
正在解压 kimageformat-plugins (5.92.0-0ubuntu1) 并覆盖 (5.92.0-0ubuntu1) ...
正在设置 kimageformat-plugins (5.92.0-0ubuntu1) ...

注意,Ubuntu的软件源中也有名为kimageformat-plugins的软件包,但它没有开启HEIF支持。我们通过源代码编译出了新的软件包并手动安装,从而支持HEIF格式。

如果一切正常,现在你可以在Gwenview中打开HEIF图片了。

善后

现在你可以手动删除刚才的脚本文件和脚本生成的文件夹了。有些文件需要使用root权限删除,因此你可能需要使用sudo rm -rf。请再三检查删除的对象,以防出现不测!

apt现在仍会提醒你升级kimageformat-plugins。为了避免我们手动编译的版本被覆盖,需要将其标记为永不升级。

sudo apt-mark hold kimageformat-plugins

如果你之后想要取消这个标记,使kimageformat-plugins被apt自动管理(从而升级),执行:

sudo apt-mark unhold kimageformat-plugins
posted @ 2022-08-20 19:23  Eslzzyl  阅读(266)  评论(0编辑  收藏  举报