在Windows Server进程中导入字体

本文关键字:导入 字体 进程 Windows Server | 更新日期: 2023-09-27 18:07:53

我有一个用于图像处理的服务。其中一项任务是在图像上覆盖一个字符串,然后将其发送给程序并显示。

我在位图图像上叠加文本时遇到了麻烦,有人能帮忙吗?

我正在尝试使用:

PrivateFontCollection fonts = new PrivateFontCollection();
public static FontFamily LoadFontFamily(string fileName, out PrivateFontCollection fontCollection)
{
    fontCollection = new PrivateFontCollection();
    fontCollection.AddFontFile(HostingEnvironment.ApplicationPhysicalPath + '/' + fileName);
    return fontCollection.Families[0];
}
FontFamily family = LoadFontFamily("arial.ttf", out fonts);
Font font = new Font(family, 20);
using (Graphics g = Graphics.FromImage(bitmap))
{
    g.DrawString("text", font, new SolidBrush(GetColorFromHexString(foreground)), new PointF(10F, 10F));
}

根据本页的信息。

由于该服务不知道'Arial'是什么-它显然是失败的。我已经将。ttf字体作为服务中的资源,并将构建内容设置为'copy always'。

谢谢!

在Windows Server进程中导入字体

Arial是最古老的Windows字体之一,它一直是所有Windows操作系统版本(包括Windows服务器)默认安装的一部分。所以没有理由:

    Font font = new Font("Arial", 20);

不工作。

Wcf与字体无关,所以我建议去掉这个标签。

如果你没有错误,但是你的图像不包含你的字符串-你的逻辑是无效的。

我建议以下步骤:

  1. 确保此代码在常规winforms项目上工作
  2. 尝试将此逻辑重构到单独的dll(类库,而不是win窗体)中。如果你有Resharper这样的工具,它会添加所有需要的引用。此时
    -你的代码应该在所有情况下都能工作,所以
  3. 将其移回以通过wcf服务公开。