0

我正在尝试使用水印插件为我的项目在图像上编写文本。现在,我正在尝试找出如何为书写框设置“宽度”,以便获得自动换行。有没有办法用水印插件做到这一点?

此外,我正在尝试查看在编写文本时是否可以获得“文本对齐:中心”效果(可能与该设置宽度相关),我该如何获得该设置?

我认为对此的替代方法是让代码驱动行返回和居中,但这意味着我必须计算我的字符的宽度,这似乎是一个痛苦的世界呵呵

这是一个代码示例,显示了我在做什么(目前有效):

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 来做一些 hacky 的事情,但结果只能勉强接受。

您可以尝试分叉 Watermark 源代码并为您的用例提供 hack 支持。如果不首先替换底层图形引擎(无论如何都可能发生),我看不到一种以通用方式改进 Watermark 的方法。

System.Drawing 具有无与伦比的图像重采样质量。但是,文本换行有点臭。

于 2013-09-30T16:09:41.363 回答