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 で動作するでしょう。

再起動時にフォントがアンインストールされているように見えるという事実は、非常に疑わしいものです。フォントは恐ろしく複雑で、バグや破損が頻繁に発生します。Open Sansなどの他の TrueType フォントを試して、動作が異なるかどうかを確認してください。

于 2013-09-30T15:50:57.297 に答える