飞天老鼠

编写简易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的选项对话框中能看到如下的样子(红色矩形中的【选项…】按钮):

0b89ce6e-e2fe-45ce-9673-73ae69423bf5.

点击【选项…】按钮,执行的就是EditOptions方法

安装完插件(如何安装?拷贝到安装目录下的plugin目录即可)后,可以看到【插入】菜单及右侧工具栏都会出现的新插件的功能(红矩形部分):

8d4609ad-1ed0-4a57-ab4a-8270c10b6ff1.

点击红矩形部分,执行的是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还没写完,本插件只是一个小功能,如果有需要的朋友可以根据自己的情况做得更灵活通用,更强大的一些。点此下载

posted on 2010-10-31 23:05  飞天老鼠  阅读(452)  评论(0编辑  收藏  举报

导航