开发环境: .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)需要特殊配置?
自己解决了:
更新 System.Drawing.Common 到 4.7 即可。4.7 版本的是今天刚发布的。。。原来是 System.Drawing.Common 的 Bug 啊!!
看看默认的字体是什么,你的centos上或许没有Monospace
这个字体。
有 Monospace 这个字体
这个可能和你html 页面编码有关系。