操作系统:Rocky Linux 9.5
环境:PHP 8.4 + MariaDB 11.3 + Redis 7.2.7 + ImageMagick 7.1.1 + libheif 1.16.1
之前一直都是正常显示heic照片的,无论是双击打开还是封面显示,都是正常,但最近把 KodBox 更新到 V1.59.03 版本后,就无法正常显示 heic 照片了,而jpg等其它普通的图片格式则没有问题。然而在系统里面直接使用convert命令进行格式转换,系统又可以正常地把heic格式的图片转换成jpg文件。
一开始怀疑是系统的问题,把系统相关的组件都重新安装了一次,但是基本没有任何作用,依旧没有办法正常显示 heic 照片。
想起这个问题是在最近一次 KodBox 更新之后发现的,为了确认跟 KodBox 的更新是否有关系,随后笔者在另外一个平台上面测试同一个版本,测试结果是依旧无法正常显示heic文件,最后把 KodBox 退回到 1.58 版本,则可以正常打开heic文件,所以可能是 V1.59.03 这个版本存在无法显示 heic 文件的 bug。
笔者已经把相关情况反馈到可道云 KodBox 开发方,看看后续更新是否会把这个问题处理。
最后,提醒一下,各类软件、系统不是越新越好,不要盲目追新,特别是在企事业单位及各单位、各类机构的正式环境内。如果要使用新版的软件或系统,最好先在测试环境下进行充分的测试,形成有效、可靠的更新方案,对旧版系统做好备份后,方可部署到正式的环境中。因为笔者这个系统是个人在家里内部使用的,并且有做备份,因此这次系统的异常对本人的影响并不是很大。

后续:已经发现该Bug是因插件“文件封面生成”引起,临时解决方法:
进入可道云 KodBox 根目录/plugins/fileThumb 目录,打开 app.php 文件,找到以下代码:
private function thumbImage($file,$cacheFile,$maxSize,$ext){
$isImage = false;
$isResize = explode(',','gif,png,bmp,jpe,jpeg,jpg,webp,heic');
if (in_array($ext,$isResize)) {
$memNeed = $this->convertmemNeed($file);
if (!$memNeed) return;
$memFree = $this->sysFreeMemory();
if ($memFree > 0 && $memFree < $memNeed) return;
$isImage = true;
}
$this->thumbImageCreate($file,$cacheFile,$maxSize,$ext);
if($isImage) return;
ImageThumb::createThumb($cacheFile,$cacheFile,$maxSize,$maxSize);
}
把上述代码注释,注释后在后面添加以下代码(来自于旧版插件)
private function thumbImage($file,$cacheFile,$maxSize,$ext){
$this->thumbImageCreate($file,$cacheFile,$maxSize,$ext);
$isResize = explode(',','gif,png,bmp,jpe,jpeg,jpg,webp,heic');
if(in_array($ext,$isResize)) return;
ImageThumb::createThumb($cacheFile,$cacheFile,$maxSize,$maxSize);
}
随后再找到以下代码:
case 'heic':$param = "-resize ".$size." -auto-orient";break;
修改成旧版的代码:
case 'heic':$param = "-auto-orient -resize ".$size;break;
修改之后保存退出。
注:以上方法仅供临时解决问题使用,建议大家还是等待可道云官方的修复。
5月31日更新:可道云官方已经推出了新版“文件封面生成”插件,大家可以在管理后台的插件中心中进行更新。