You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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,提问作者Евгений Ващенко

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 16:32:14