编写简易Windows Live Writer的水印插件
Windwos Live Writer作为一款博客的客户端工具,确实相当好用,特别是支持自定义插件,自己想要一些特殊的功能,完全可以自己加。不过插件也的功能也有限,但是通常的应用场合完全能满足需求啦。由于没有找到Windows Live Writer的api文档,所以反编译了WindowsLiveWriter.SourceCode来当参考。下面看看是如何实现这个插件的。
首先,需要建一个ClassLibrary的工程,这里取名为WaterMarkPlugin。注意:目标框架要设置成.Net Framework 2.0.添加WindowsLive.Writer.Api(在Windows Live Writer的安装目录下)与System.Windows.Forms两个程序集的引用。接着创建一个类,继承自ContentSource
using System; using WindowsLive.Writer.Api; using System.Windows.Forms; using System.Drawing; using System.IO; namespace WaterMarkPlugin { [InsertableContentSource("水印"), WriterPlugin("E140849A-F807-4BB6-9006-002430A3E497", "水印", HasEditableOptions = true, Description = "选择的图片可以自动打上水印")] public class Plugin : ContentSource { public override DialogResult CreateContent(IWin32Window dialogOwner, ref string content) { return DialogResult.OK; } public override void EditOptions(IWin32Window dialogOwner) { } } }
这段代码可以说是一个啥都不能做的插件完成了。InsertableContentSource描述了这个插件在【插入】菜单也右侧工具栏上显示的文本,WriterPlugin描述了插件的id,名称,描述信息以及是否有可编辑的选项(HasEditableOptions ).如果HasEditableOptions 设成true,那么在Windows Live Writer的选项对话框中能看到如下的样子(红色矩形中的【选项…】按钮):
点击【选项…】按钮,执行的就是EditOptions方法
安装完插件(如何安装?拷贝到安装目录下的plugin目录即可)后,可以看到【插入】菜单及右侧工具栏都会出现的新插件的功能(红矩形部分):
点击红矩形部分,执行的是CreateContent方法,通过ref string content返回给Windows Live Writer需要在文档中插入的文本。
结合上一篇博文的内容,把添加水印的代码加进来就Ok了。
public override DialogResult CreateContent(IWin32Window dialogOwner, ref string content) { OpenFileDialog odf = new OpenFileDialog(); odf.Filter = "jpg文件|*.jpg|bmp文件|*.bmp|所有文件|*.*"; DialogResult result = odf.ShowDialog(dialogOwner); if (result == DialogResult.OK) { content = @"<img src=""" + AddWaterMark(odf.FileName) + @""">"; } return DialogResult.OK; }
private string AddWaterMark(string srcPath)
{
string text = "飞天老鼠";
Image image = Image.FromFile(srcPath);//filePath是图片的路径
Graphics g = Graphics.FromImage(image);
Font f = new Font("Verdana", 16);//设置字体与字号,按具体需要来设,这里只是个例子
Brush b = new SolidBrush(Color.White);//水印文字的颜色
g.DrawString(text, f, b, 10, 10);//后面两个10,表示的是文字的起始坐标
g.Dispose();
string tempFolder = Path.GetTempPath() + @"WaterMarkPlugin";
if (!Directory.Exists(tempFolder))
{
Directory.CreateDirectory(tempFolder);
}
string newPath = tempFolder + @"\" + Guid.NewGuid().ToString() + "." + Path.GetExtension(srcPath);
image.Save(newPath);
image.Dispose();
return newPath;
}
最后,杯具的是,当我写完这篇文章的时候才发现,Windows Live Writer自己就可以非常灵活设置文字水印,只是每次都要手工去设。
附上代码,里面的EditOptions还没写完,本插件只是一个小功能,如果有需要的朋友可以根据自己的情况做得更灵活通用,更强大的一些。点此下载