个人博客相册图片长时间加载不出来,heic格式图片背大锅。
事情是这样的,我的相册在很长一段时间打开都是这样的:
我把放在相册中的图片减少了一半,发现还是一点都不会加载。那可能虽然有数量的问题,但是还是有其他更主要的问题。
然后我就注意到了图片好像少了几张,我查看我的资源文件发现,少的这几张都是heic格式的图片。这里我网上找了一段:
1 HEIC(高效图像容器)是苹果公司基于HEIF(高效图像文件格式)和HEVC(高效视频编码)技术开发的一种图像存储格式。
这个格式呢,浏览器是不兼容的,我在想是不是就是这个导致的加载缓慢。然后我把heic格式的图片都去掉了,结果果然是这个原因,虽然由于图片多,没有做异步出现还是稍微有点慢,但是起码加载出来了。
这样就简单了,只要把heic格式的图片转为jpg格式的就好了。
但是!
如果只是把heic后缀改为jpg的话,在hexo g的时候,静态图片还会变为heic形态。这是因为图片的二进制文件,在标注文件格式的二进制码中,仍然是heic格式,这就需要工具转成jpg格式。
这里我给大家先找了个在线转化器:
迅捷图片转化器:https://www.xunjietupian.com/heic/
除此之外,下面我提供一个python的批量转化文件夹中heic图片格式的脚本。该脚本可以将指定的目录以及其子目录下所有heic图片转化为jpg格式。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 """ python -m venv venv activate激活环境后 依赖安装:pip install pillow-heif """ import argparseimport osfrom pathlib import Pathfrom pillow_heif import register_heif_openerfrom PIL import Imageregister_heif_opener() def heic_to_jpg (heic_path: Path, quality: int = 95 , delete_after: bool = False ) -> bool : """单文件转换,成功返回 True""" jpg_path = heic_path.with_suffix(".jpg" ) try : with Image.open (heic_path) as im: rgb = im.convert("RGB" ) rgb.save(jpg_path, format ="JPEG" , quality=quality, optimize=True ) if delete_after: heic_path.unlink() print (f"[OK] {heic_path} -> {jpg_path} " ) return True except Exception as e: print (f"[ERR] {heic_path} : {e} " ) return False def walk_convert (root: Path, quality: int , delete_after: bool ): """递归遍历""" total = 0 ok = 0 for heic in root.rglob("*.heic" ): total += 1 if heic_to_jpg(heic, quality, delete_after): ok += 1 print (f"\n全部完成:{ok} /{total} 个文件转换成功" ) def main (): parser = argparse.ArgumentParser(description="递归 .heic → .jpg 真正转换" ) parser.add_argument("root" , help ="要扫描的根目录" ) parser.add_argument("--delete" , action="store_true" , help ="转换后删除原 .heic" ) parser.add_argument("--quality" , type =int , default=95 , help ="JPEG 质量 1-100,默认 95" ) args = parser.parse_args() root = Path(args.root).expanduser().resolve() if not root.is_dir(): print ("路径不存在或非目录:" , root) return walk_convert(root, args.quality, args.delete) if __name__ == "__main__" : main()
这个脚本需要预先安装pillow-heif包:pip install pillow-heif。
具体执行方式如下:
1 2 3 4 5 递归地把目录下所有 .heic → .jpg 用法: python heic2jpg.py 根目录 [--delete] [--quality 95] --delete 转换成功后删除原 .heic 文件(可选) --quality 输出 JPEG 质量 1-100,默认 95
执行过程如下: