我正在尝试使用水印插件为我的项目在图像上写文字。现在我正试图找出如何为书写框设置“宽度”,这样我就可以获得自动换行。有没有办法用水印插件做到这一点?
此外,我正在尝试查看在编写文本时是否可以获得“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 };
编辑:我还要提到我写的文字是用户提交的,所以每次都不同。如果你想要一个类似的案例,可以考虑一下有趣的猫图像,上面有搞笑的文字标题。这个项目非常相似。 (减去猫)
感谢您的帮助!
答案 0 :(得分:1)
基本上,System.Drawing(以及当前版本的Watermark)对于换行非常原始。
正如你所提到的,你可以通过字符计数和使用循环单独的MeasureString调用来做hacky,但结果几乎不可接受。
您可以尝试分叉Watermark源代码并破解对您的用例的支持。我没有看到以一般方式改进Watermark的方法,而没有首先更换底层图形引擎(无论如何都可能发生)。
System.Drawing具有无与伦比的图像重采样质量。但文字包装却有点臭。