Matlab调用ZXing的详细步骤——二维码生成

关于中文编码可以参考这里:
《用ZXing.NET对中文字符串编码》
       最近经常有纸条和留言问我关于Matlab调用ZXing的问题。总的说来,Matlab提供了良好的对Java的支持,所以这本该是一件很容易的事情。从留言上看,主要问题可能在于很多Matlab的用户缺乏对Java的基本了解,无法自行编译Java代码并打包成Jar。即使有了Jar包,由于缺乏对Java的基本了解,也无法正确使用Matlab提供的用于和Java模块通信的各种函数。为了一劳永逸地解决这个问题,我这里提供一份比之前 《在Matlab中调用ZXing的代码生成QR二维码》 中更详细的指南,可能并不全面,但绝对简单。
       首先需要解决一个必须解决的问题:“我不会编译Java源码,也不会做Jar包,怎么办?”我想了好久,找到了一个绝妙的解决办法:用dotNET版的ZXing!打开页面 http://zxingnet.codeplex.com/releases/view/117068 ,如下
Matlab调用ZXing的详细步骤——二维码生成

点击ZXing.Net.0.14.0.0.zip下载,得到一个zip压缩包。打开压缩包,看见内容如下:
Matlab调用ZXing的详细步骤——二维码生成
压缩包里有net2.0, net3.5, net4.0和net4.5四个文件夹,这些文件夹对应了不同的dotNET版本,根据自己的需要挑选一个,如果实在不知道选哪个,就选版本最低的那个文件夹。打开选中的文件夹,里面有一个名为zxing.dll的文件,解压这个文件,把它放到Current Directory中。这个zxing.dll包含了所有用于生成二维码的代码,拿来用就可以了,比Java版的简单多了吧。作为代价,你的操作系统必须支持dotNET;同时,你的Matlab也必须支持dotNET。Matlab早期版本不支持dotNET,从7的某个版本(好像是7.8)开始,Matlab提供了对dotNET的支持,所以,确保你的Matlab版本足够新。
       现在可以在Matlab中开始操作了。首先,确定文件zxing.dll的完整路径,你可以在资源管理器中选中zxing.dll,然后单击“复制路径”按钮,如下图所示:
Matlab调用ZXing的详细步骤——二维码生成

切换到Matlab的Command Window,执行如下的命令:
>> zxingasm = NET.addAssembly('C:\Users\xialulee\Documents\MATLAB\zxingtest\zxing.dll');
注意上面的路径,你在使用的时候,根据自己zxing的实际路径进行修改。执行完上面的命令之后,zxing.dll就被加载了。想看看zxing.dll提供了哪些类?执行如下的命令:
Matlab调用ZXing的详细步骤——二维码生成

       为了生成二维码,首先需要创建一个ZXing.MultiFormatWriter的实例,执行如下的命令:
>> writer = ZXing.MultiFormatWriter()

writer =

   MultiFormatWriter with properties:

       SupportedWriters: [1x1 System.Collections.Generic.Dictionary*KeyCollection>]

接下来,使用MultiFormatWriter的encode方法,对一个字符串进行编码,如下:
>> mtx = writer.encode('http://blog.sina.com.cn/xialulee', ZXing.BarcodeFormat.QR_CODE, 400, 400)

mtx =

   BitMatrix with properties:

               Width: 400
             Height: 400
       Dimension: 400

到此,编码已经完成。下一步要做的,是从这个名为mtx的BitMatrix实例中提取图像数据。我们可以用它的ToBitmap将其转化为一个dotNET的Bitmap对象,然后想办法将其转化为Matlab矩阵。但是这里为了简单起见,选择了之前就用过的方法:调用mtx的ToString方法,如下:
>> m = char(mtx.ToString());
m对应了一个字符串,其中,一个空格代表白,一个'X'代表黑,两个像素之间使用空格分隔,每一行的结尾使用'\r\n'作换行符。下面将是纯粹的Matlab操作,将字符串转换为Matlab可以接受的图像矩阵。
       首先删除'\r'。'\r'的值等于13,执行如下代码:
>> m(m==13) = [];
删除'\n'。'\n'的值等于10,执行如下代码:
>> m(m==10) = [];
       接下来,删除用于分隔像素的空格,执行如下代码:
>> m = m(1:2:end);
       调用encode方法时,指定的图像尺寸是400×400,使用下面的代码将字符串m转化为400×400的char矩阵:
>> m = reshape(m, 400, 400);
       将char矩阵m中的X替换为0,空格替换为1,使用如下的命令:
>> m(m~='X') = 1;
>> m(m=='X') = 0;
       将char矩阵m转化为double矩阵,同时转置一下,不要忘了Matlab是column-major的语言:
>> m = double(m)';
       显示double矩阵m:
>> imshow(m)

Matlab调用ZXing的详细步骤——二维码生成


转自:http://blog.sina.com.cn/s/blog_4513dde60101vykn.html

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值