最近对开发框架进行了整理,可以很好的为CS3、CS4、CS5、CS6、CC开发插件了。
准备
插件开发框架【已有】
二维码库【libqrencode】
libqrencode
http://fukuchi.org/works/qrencode/
可以编码字符串或结构化的数据。
使用QRcode_encodeString()来编码一个字符串。给出的字符串将被自动分析和编码。如果你希望编码的数据可以以C风格字符串来表现,你可以简单的这样使用。如果输入的数据包含Kanji(Shift-JIS)字符,你腻歪作为Kanji来编码它们,需要给出QR_MODE_KANJI作为一个标志。否则,所有不是字母或数字的字符将以8位数据来编码。如果你希望所有的字符串以8位模式编码,使用QRcode_encodeString8bit.
你可以手动的构建一个输入数据的结构体。如果已知输入数据的结构体,可以这样使用,首先,用QRinput_new()创建一个QRinput对象。然后,使用QRinput_append()来添加数据到QRinput对象。最后调用QRcode_encodeInput()来编码QRinput数据。你可以重复使用QRinput数据,传入不同的参数,构建不同的符号。
编码好的符号是一个QRcode对象。它包含版本号,符号的宽度和一个表示符号的数组。你可以使用QRcode_free()来释放这个对象。
请注意结果版本号可能大于指定的,这种情况下,输入的数据对于编码为指定的版本来说可能过大。
libqrencode还可以生成Sructured-appended符号集,用来将一个大数据集合分解到多个QR code中。一个QR code reader连接多个QR code符号到一个字符串中。正如QRcode_encodeString(),你可以使用QRcode_encodeStringStructured()来生成structured-appended符号。这个函数返回一个QRcode_List的实例。这个list是一个QRcode的单向链表。你可以以下面的方式获得每一个QR code:
QRcode_List *qrcodes;
QRcode_List *entry;
QRcode *qrcode;
qrcodes = QRcode_encodeStringStructured(...);
entry = qrcodes;
while(entry != NULL)
{
qrcode = entry->code;
//do something
entry = entry->next;
}
QRcode_List_free(entry);
可以构建自己的input结构来取代自动分析函数。首先,调用QRinput_Struct_new()函数来实例化一个QRinput_Struct对象。这个对象可以保存多个QRinput。QRinput_Struct_appendInput()添加一个QRinput到QRinput_Struct对象中。为了生成structured-appended符号,需要嵌入头到每个符号中。可以使用QRinput_Struct_insertStructuredAppendHeaders()来插入合适的头到每个符号中。必须在编码符号钱调用这个方法一次。
libqrencode库的测试
新建MFC单文档程序,将libqrencode中的h和c文件往工程里拷贝,编码,修改编译错误。
void CChildView::On32771()
{
string src = "http://www.baidu.com";
if(m_pQRcode)
{
QRcode_free(m_pQRcode);
m_pQRcode = NULL;
}
m_pQRcode = QRcode_encodeString(src.c_str(), 0, QR_ECLEVEL_H,
QR_MODE_8, 1);
Invalidate();
}
用最低容错率生成的冒似和百度首页的轻应用的生成的不一样,不知道原因,高容错率是一致的,请各位看官核对一下,效果如下:
插件开发
AI二维码插件就是将上面的MFC中的代码移植到AI中,将图形转换为AI文档中对应的Art。
效果如下:
好了,这个插件大体上是完成了,http://pan.baidu.com/s/1jG3K5Zw.