.net ImageResizer-如何动态定位文本水印

.net ImageResizer-如何动态定位文本水印,.net,asp.net-mvc-4,imageresizer,.net,Asp.net Mvc 4,Imageresizer,对于像我这样的人来说,在ImageResizer糟糕的文档中挣扎,甚至添加了水印文本,下面的代码是有效的: var c = Config.Current; var wp = new WatermarkPlugin(); --> be sure to include wp.Install(c); --> be sure to include wp = c.Plugins.Get< WatermarkPlugin >(); -- b

对于像我这样的人来说,在ImageResizer糟糕的文档中挣扎,甚至添加了水印文本,下面的代码是有效的:

var c = Config.Current;
var wp = new WatermarkPlugin();  --> be sure to include
wp.Install(c);                   --> be sure to include   
wp = c.Plugins.Get< WatermarkPlugin >(); -- be sure to include (ignore spaces in <>*)

var t = new TextLayer { Text = "Hello ", Fill = true };
var i = new ImageLayer(c);
const string dest = @"c:\tmp\Image16a.png";
var source = Server.MapPath("~/image.png");    
wp.NamedWatermarks["img"] = new Layer[] { i }; 
wp.NamedWatermarks["text"] = new Layer[] { t };
c.CurrentImageBuilder.Build(source, dest, new ResizeSettings("watermark=text;name=John Doe"));
var c=Config.Current;
var wp=新水印插件();-->一定要包括
可湿性粉剂。安装(c);-->一定要包括
wp=c.Plugins.Get();--确保包括(忽略*中的空格)
var t=newtextlayer{Text=“Hello”,Fill=true};
var i=新的成像层(c);
常量字符串dest=@“c:\tmp\Image16a.png”;
var source=Server.MapPath(“~/image.png”);
wp.NamedWatermarks[“img”]=新层[]{i};
wp.NamedWatermarks[“text”]=新图层[]{t};
c、 CurrentImageBuilder.Build(源、目标、新大小设置(“水印=文本;名称=John Doe”);

但是,如何允许用户选择将文本水印放置在何处?同样,我在文档中找不到有关此内容的任何信息?

这些是变量
t
的属性,可以设置为像素或百分比。。。还有许多其他设置可以应用于
t

var t = new TextLayer { Text = "Hello #{name}", Fill = true};
t.Top = new DistanceUnit(0, DistanceUnit.Units.Pixels);
t.Left = new DistanceUnit(50, DistanceUnit.Units.Percentage);
更新:举个例子,下面是我如何使用jCrop跟踪/保存裁剪值。您可以看到,我用来进行裁剪的工具允许我在任何更改时启动javascript函数(
showCoords
),这就是我记录用户想要裁剪的当前维度的地方

$(document).ready(function() {
    $('#<%= _cropImage.ClientID %>').Jcrop({
        aspectRatio: 3 / 4,
        onChange: showCoords,
        onSelect: showCoords,
        onRelease: showCoords
    });
});

function showCoords(c)
{
    $("#<%= _cropInfo.ClientID %>").val(c.x + "," + c.y + "," + c.x2 + "," + c.y2);
}
$(文档).ready(函数(){
$('#').Jcrop({
方面:3/4,
onChange:showCoords,
onSelect:showCoords,
onRelease:showCoords
});
});
函数showCoords(c)
{
$(“#”)val(c.x+”、“+c.y+”、“+c.x2+”、“+c.y2”);
}

因此,当页面发回时,我使用
\u cropInfo
的值来知道应该在哪里进行裁剪。无论您使用什么方法让用户在图像周围移动文本,都应该有类似的功能。

MIke,首先,我感谢您的帮助。但是正如我所说的,文本的位置在运行时之前是未知的,因此,在用户添加文本并将其围绕图像移动到他想要的任何位置之前,坐标都是未知的。有可能吗?我上面提供的
值可由您配置。。。所以把它设置成你想要的。无论你用什么方法让用户在图像周围移动文本,我猜都会给你一些坐标,让你知道文本在哪里结束。。。所以用这个。您没有包含任何关于如何让用户这样做的代码,因此我的回答中不能包含这些代码。例如,我使用JCrop让用户裁剪图像。我有跟踪和记录他们想要裁剪的所有坐标的函数,所以当他们单击我的“裁剪”按钮时,我就使用ImageResizer使用这些坐标裁剪。这正是我的点。我完全不知道如何配置web应用程序来捕获用户移动文本的位置,更不用说文本是否可以移动了。你能推荐什么吗。我发现有趣的是,在观看html代码(GoogleInspector)时,当我移动裁剪工具时,我看到坐标发生了变化。不太明白为什么相同的功能不能用于水印文本。或者是JCrop提供了该功能而不是ImageResizer?请将源代码修改为水印。您需要获取从一个位置(URL)到另一个位置(图层变量)的坐标。虽然这不是一个默认行为(出于充分的理由),但通过修改源代码可以很容易地做到这一点——甚至有一个关于如何做到这一点的示例,由“text”命令提供。这不应该关闭,至少不是出于这个原因,因为他展示的代码显示了他对该功能的最低理解。@LanceRoberts问题是他最终的问题,正如我回答下面的评论所示:“问题是什么脚本允许文本移动开始”。虽然ImageResizer没有宣传此功能,我们允许每个人编辑源代码以实现他们想要的。可以编辑中的
Plugins\Watermark\TextLayer.cs
中的
RenderTo
方法来实现此目的。查询字符串可通过
s.settings
访问。也就是说,对于“newcommand=hi”,s.settings[“newcommand”]
=“hi”
this.Top
this.Left
等可以根据需要根据任何查询字符串参数从RenderTo方法进行修改。