ASP.NET Core 3.0 Graphics.DrawString 在 CentOS 7上乱码

2019-12-04 14:11发布

问题:

开发环境: .NET Core 3.0
部署环境: CentOS 7
代码:
public IActionResult GetImage(string str)
{
if (string.IsNullOrEmpty(str)) str = "123";
string bgImageFile = $"{hostingEnv.WebRootPath}/image/bg.jpg";
string newJpgFile = $"{hostingEnv.WebRootPath}/image/new.jpg";

using (var image = Image.FromFile(bgImageFile))
{
    using (Graphics g = Graphics.FromImage(image))
    {
        using (Font font = new Font("Monospace", 12, FontStyle.Regular))
        {
            using (SolidBrush brush = new SolidBrush(Color.Black))
            {
                g.DrawString(str, font, brush, 0, 0);
                image.Save(newJpgFile);
            }
        }
    }
}
return File("/image/new.jpg", "image/jpeg");

}

DrawString 一个字符正常:

DrawString 两个以上字符就乱码,出现方框:

在开发环境和部署到在 Windwos 下一切正常。

同样的代码,用 .Net Core 2.0 开发并部署在同一台CentOS上运行,DrawString 任意长度的字符串都正常。

.NET Core 3.0 部署到 CentOS(Graphics.DrawString)需要特殊配置?

回答1:

自己解决了:

更新 System.Drawing.Common 到 4.7 即可。4.7 版本的是今天刚发布的。。。原来是 System.Drawing.Common 的 Bug 啊!!



回答2:

看看默认的字体是什么,你的centos上或许没有Monospace这个字体。



回答3:

这个可能和你html 页面编码有关系。