0

透かしプラグインを使用して、プロジェクトの画像にテキストを書き込もうとしています。現在、自動改行を取得できるように、手書きボックスの「幅」を設定する方法を見つけようとしています。透かしプラグインでこれを行う方法はありますか?

また、テキストを書いているときに "text-align: center" 効果を得ることができるかどうかを確認しようとしています (その設定幅に関連している可能性があります)。どうすればその設定を取得できますか?

これに代わる方法は、コード駆動の改行とセンタリングを使用することだと考えていますが、これは文字の幅を数えなければならないことを意味し、これは苦痛の世界のようです。

これは私がやっていることを示すコードサンプルです (これは現在動作しています):

var c = Config.Current; 
var wp = c.Plugins.Get<WatermarkPlugin>();

var t = new TextLayer(); 
t.Text = panty.Message; 
t.TextColor = (System.Drawing.Color) color; 
t.Font = fonts[myFunObject.Font]; 
t.FontSize = fontSize[myFunObject.LogoPosition];

t.Left = new DistanceUnit(5, DistanceUnit.Units.Pixels); 
t.Top = new DistanceUnit(5, DistanceUnit.Units.Pixels);

wp.NamedWatermarks["myFunObjectMessage"] = new Layer[] { t };

編集:私が書いているテキストはユーザーが提出したものであるため、毎回異なることにも言及する必要があります。同様のケースが必要な場合は、面白いテキストキャプションが付いた面白い猫の画像について考えてみてください。このプロジェクトはそれによく似ています。(猫は除く)

助けてくれてありがとう!

4

1 に答える 1

1

基本的に、System.Drawing (したがって現在のバージョンの Watermark) は、行の折り返しに関して非常に原始的です。

あなたが言及したように、文字数を数えたり、ループを使用して MeasureString 呼び出しを分離したりすることでハックなことを行うことができますが、結果はかろうじて受け入れられるものです。

ウォーターマークのソース コードをフォークして、ユース ケースのサポートをハックすることもできます。最初に基盤となるグラフィック エンジンを交換せずに透かしを一般的な方法で改善する方法がわかりません (いずれにせよ発生する可能性があります)。

System.Drawing は、卓越した画像リサンプリング品質を備えています。ただし、テキストの折り返しは、ちょっと面倒です。

于 2013-09-30T16:09:41.363 に答える