您的位置:首页 > 编程语言 > MATLAB

在Matlab中调用ZXing的代码生成QR二维码

2016-04-28 23:00 861 查看
本作品采用知识共享署名-非商业性使用-相同方式共享
3.0 Unported许可协议进行许可。允许非商业转载,但应注明作者及出处。
作者:xialulee
最初发布于:2011年10月30日,http://blog.sina.com.cn/xialulee
如果不会编译Java源码,或者不会在Matlab中使用Java,可以参考这里:
《Matlab调用ZXing的详细步骤——二维码生成》
     
    班上很多电脑都是没有联网的,有时候在上面看Matlab的文档时,有一些链接想查阅一下,于是可以拿出可以上网的手持设备,比如手机啊,MP3播放器什么的,来看这些链接的内容。但是在手持设备触屏的虚拟键盘上输入链接地址并不是一件愉快的事情。以前在《Python通过JPype调用ZXing生成二维码》给出的Python脚本可以将文本转化为QR二维码,这样就可以利用设备上的摄像头直接通过扫描的方式获取链接地址。但是,要使用这个脚本,需要电脑上安装了Python以及JPype,可是很多电脑没有这些。由于这里大部分电脑都有Matlab,而Matlab又集成了Java,因此,写了一个Matlab函数,调用ZXing来生成二维码。
    在《Python通过JPype调用ZXing生成二维码》中,利用MultiFormatWriter对象得到二维码的BitMatrix对象后,通过MatrixToImageWriter写入到一个图像文件当中。但是,每次都要为生成的链接创建一个文件觉得有点麻烦,所以,稍微研究了一下MultiFormatWriter的encode方法返回的BitMatrix对象,发现对其调用toString方法后,得到了用字符串形式表示的二维码图像,其中,两个连续的空格代表浅像素,一个'X'和一个空格代表深像素。这样,在Matlab中,将这个字符串转化为一个0-1矩阵,并使用imshow来显示它,就避免了创建文件。函数的代码如下。想要正常使用这个函数,需要先下载ZXing的源码,编译,并将编译出的相关的class们都打包成zxing.jar。




function mtx = qrgen(content, width, height)
% Generate QR using zxing
% Please compile the zxing source code and zip it into a jar file named
%   zxing.jar
% Put zxing.jar in the same directory of this file.
% Parameters:
%   content: string to be encoded
%   width:   the width of the image
%   height:  the height of the image
% Matlab 7.11
% xialulee 2011.10.30 PM 08:18

zxingpath = fullfile(fileparts(mfilename('fullpath')), 'zxing.jar');

c = onCleanup(@()javarmpath(zxingpath));

javaaddpath(zxingpath);

writer = com.google.zxing.MultiFormatWriter();

bitmtx = writer.encode(content, com.google.zxing.BarcodeFormat.QR_CODE, ...

    width, height);

mtx = char(bitmtx);

clear bitmtx writer

mtx(mtx==10) = []; % remove \n

mtx = reshape(mtx(1:2:end), width, height)'; % remove extra space and transpose

mtx(mtx~='X') = 1;

mtx(mtx=='X') = 0;

mtx = double(mtx);
if nargout == 0

    imshow(mtx);
end
end % c executes javarmpath(zxingpath) here

打包好的zxing.jar要和上面的qrgen.m放在同一个目录中,因为qrgen的代码中利用mfilename获取自身的目录,并认为zxing.jar也在这一目录中。使用效果如下:




转自:http://blog.sina.com.cn/s/blog_4513dde601019mfh.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: