使用Imageresizer Watermark插件写入文本:居中,宽度和换行

时间:2013-08-20 15:31:55

标签: c# image-resizing imageresizer

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

此外,我正在尝试查看在编写文本时是否可以获得“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 };
编辑:我还要提到我写的文字是用户提交的,所以每次都不同。如果你想要一个类似的案例,可以考虑一下有趣的猫图像,上面有搞笑的文字标题。这个项目非常相似。 (减去猫)

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

基本上,System.Drawing(以及当前版本的Watermark)对于换行非常原始。

正如你所提到的,你可以通过字符计数和使用循环单独的MeasureString调用来做hacky,但结果几乎不可接受。

您可以尝试分叉Watermark源代码并破解对您的用例的支持。我没有看到以一般方式改进Watermark的方法,而没有首先更换底层图形引擎(无论如何都可能发生)。

System.Drawing具有无与伦比的图像重采样质量。但文字包装却有点臭。