如何用PHP Imagick转换含西里尔文的WMF为PNG且避免乱码?
解决Imagick转换WMF到PNG时西里尔文乱码问题
核心原因
Imagick处理WMF文件时依赖系统字体库渲染文本。如果Ubuntu系统缺少西里尔文兼容字体,或者ImageMagick未正确映射到可用的西里尔文字体,就会导致文本乱码。
解决方案
1. 安装系统西里尔文字体
在Ubuntu 22上安装覆盖西里尔文字符的通用字体,比如DejaVu Sans:
sudo apt update && sudo apt install fonts-dejavu fonts-dejavu-core fonts-dejavu-extra
安装完成后重启nginx更新系统字体缓存:
sudo systemctl restart nginx
2. 在PHP代码中指定字体
修改Imagick代码,明确指定已安装的西里尔文字体,避免自动 fallback 到不兼容字体:
$image = new Imagick(); // 可选:设置高分辨率提升文本清晰度 $image->setResolution(300, 300); // 指定字体路径(根据实际安装路径调整) $image->setFont('/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf'); $image->readImage("01257.wmf"); $image->writeImage("01257_new.png"); $image->clear(); $image->destroy();
3. 验证Ghostscript依赖
WMF格式处理依赖Ghostscript,确保Ubuntu上的版本足够新(Ubuntu 22默认版本为9.55+,通常满足需求)。检查版本:
gs --version
版本过低时执行更新:
sudo apt install --only-upgrade ghostscript
4. 确认ImageMagick字体识别
执行以下命令查看ImageMagick可识别的西里尔文相关字体:
convert -list font | grep -i cyrillic
输出中出现DejaVuSans等字体即表示配置正常。
内容的提问来源于stack exchange,提问作者Евгений Ващенко
相关产品推荐
相关产品推荐

