matlab之随心所欲创建QR二维码

2019-07-19 16:06:33 浏览数 (3)

二维码已经成为日常中不可或缺的工具,使用它可以轻松地进行支付交易、添加好友、传递信息,化繁为简,极大便捷了人们的生活。

今天给大家介绍使用ZXing库文件生成二维码的方法,ZXing是使用Java语言编写一种开源的、多格式的1D/2D条形码图像处理库。本文使用的是ZXing的dll文件,使用前需要使用NET.addAssembly函数将相关类库加载到matlab中,ZXing库中有很多实例方法,可以通过methodsview函数进行详细查看。

以下是具体实现程序:

代码语言:javascript复制
% 读取logo图片
I = imread('logo.jpg');
% 取logo大小
[Lx,Ly,~] = size(I);
% 定义二维码大小
len = 600;
% 将 .NET 程序集添加至 MATLAB
asmInfo = NET.addAssembly([pwd,'zxing.dll']);
% methodsview ZXing.MultiFormatWriter
% 创建MultiFormatWriter类的对象
writer = ZXing.MultiFormatWriter();
% 创建泛型特化实例
hints = NET.createGeneric('System.Collections.Generic.Dictionary', {'ZXing.EncodeHintType', 'System.Object'});
% 采用utf-8编码以支持中文显示
hints.Add(ZXing.EncodeHintType.CHARACTER_SET, 'utf-8')
% 调用MultiFormatWriter类的成员函数encode将指定内容加密成bitmap对象
bitM = writer.encode('感谢关注matlab爱好者!', ZXing.BarcodeFormat.QR_CODE,len,len,hints);
% 将对象转换成字符串
QR = char(bitM.ToString());
% 删除字符串中的换行符'rn',其中r的值为13,n的值为10
QR(QR==10) = [];
QR(QR==13) = [];
% 删除分隔像素的空格
nQR = QR(1:2:end);
% 将字符串转换成len*len的字符串矩阵
nQR = reshape(nQR, len, len);
% 二值化字符串
nQR(nQR~='X') = 255;
nQR(nQR=='X') = 0;
% 定义新矩阵以组合logo和QR码图像
nm = 255*ones(len,len,3);
nm(:,:,1) = nQR;
nm(:,:,2) = nQR;
nm(:,:,3) = nQR;
nm(round(len/2-Lx/2):round(len/2-Lx/2) Lx-1,round(len/2-Ly/2):round(len/2-Ly/2) Ly-1,:) = I;
% 强制转换为uint8型数据
nm = uint8(nm);
imshow(nm);

1 人点赞