0

我正在使用 ImageResizer 的 Watermark 插件在我的图像上写这个文本层。工作正常!但现在我想使用特定的字体。如果我在我的系统上指定一个现有的字体,工作正常!

出现我的问题是因为我要使用这种自定义 .TTF 字体。我目前在本地运行,所以我在我的 Windows 7 中安装了字体。字体看起来安装正确,当我打开 Outlook 时,我可以使用那里的字体来设置我的文本样式。

如果我重新启动,字体会显示为已卸载。当我尝试再次安装它时,Windows 说它已经安装。

最终我尝试取消阻止 .ttf 文件并重新安装,但没有帮助。由于我通过在 IIS 中运行的 c# 代码使用它,我还尝试为“网络服务”用户(我的应用程序池在其下运行)提供字体文件(在我的 Windows/Fonts 文件夹中)完全控制。

我检查了 InstalledFontCollection installedFonts = new System.Drawing.Text.InstalledFontCollection();,用调试器运行并试图找到我的字体,但不在那里。尝试使用 PrivateFontCollection 直接加载它,我得到一个文件未找到异常。

所以......我的想法已经用完了!我应该寻找什么来找出问题所在?谢谢!

下面是我正在运行的为图像添加水印的代码:

var c = Config.Current;

// Name layer
var userNameLayerA = new TextLayer();
userNameLayerA.Text = firstName + " " + lastName;
userNameLayerA.TextColor = System.Drawing.Color.Black;
// userNameLayerA.Font = "Verdana"; // --> Works fine!
userNameLayerA.Font = "Headline Two"; // --> Does not work!
userNameLayerA.FontSize = 16;
userNameLayerA.Style = FontStyle.Bold;
userNameLayerA.Align = ContentAlignment.MiddleCenter;
userNameLayerA.Top = new DistanceUnit(295, DistanceUnit.Units.Pixels);

// Register layer
var wp = c.Plugins.Get<WatermarkPlugin>();
wp.NamedWatermarks["userNameLayerA"] = new Layer[] { userNameLayerA };

// Build image
c.CurrentImageBuilder.Build(posterAEnFilePath, posterAEnDestinationFilePath, new ResizeSettings("watermark=userNameLayerA;"));
4

1 回答 1

1

如果不能用 PrivateFontCollection.AddFontFile 加载,那么 ImageResizer 肯定无法访问它。

有些东西阻止了字体被访问或加载。这可能是 NTFS 权限问题,或一些深奥的 .NET 安全规则。我会首先专注于使用 PrivateFontCollection 加载字体 - 如果你成功了,它可能会与 ImageResizer 一起使用。

重新启动时字体出现卸载的事实非常可疑。字体非常复杂,经常有错误或损坏。您可以尝试其他一些 TrueType 字体,例如Open Sans,看看它们的行为是否有所不同。

于 2013-09-30T15:50:57.297 回答