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