使用libqrencode库制作二维码电子名片——IOS版

  

1,效果图:

点击生成按钮,显示二维码:

使用libqrencode库制作二维码电子名片——IOS版

使用微信扫一扫后,获得如下界面:

使用libqrencode库制作二维码电子名片——IOS版

2, libqrencode库:

libqrencode是一个日本人(Fukuchi太郎)写的生成二维码的跨平台c语言库。
官网是这里,Github在这里。
本人最喜欢的就是这种【<强>用c写成的,跨平台的,功能单一的,使用方便的】库!
IOS中Objc使用c/c++库超方便,android下,稍微麻烦一点。

3, Objc对libqrencode包装:

网上找的QRCodeGenerator类,由安德鲁Kopanev实现。
很简单,就一个方法,给定一个字符串,返回一个界面图像表示的二维码图片:

 @interface  QRCodeGenerator : NSObject
  
  +,(UIImage  *) qrImageForString: (NSString  *) string  p_w_picpathSize: (CGFloat)大小;
  
  @end 

来看一下实现的关键点:

 +, (UIImage  *) qrImageForString: (NSString  *) string  p_w_picpathSize: (CGFloat) size  {
  ,,,if  (! [string 长度]),{
  ,,,,,,,return 零;
  ,,,}
  
  ,,,//第一步:通过utf字符串生成QRCode,调用的是libqrencode的核心函数
  ,,,QRcode  * code =, QRcode_encodeString ([string  UTF8String], 0, QR_ECLEVEL_L,, QR_MODE_8,, 1);
  ,,,if 代码(!),{
  ,,,,,,,return 零;
  ,,,}
  
  ,,,//第二步:create 上下文
  ,,,CGColorSpaceRef  colorSpace =, CGColorSpaceCreateDeviceRGB ();
  ,,,CGContextRef  ctx =, CGBitmapContextCreate(0,大小,尺寸,,8日,size  *, 4,色彩,,kCGImageAlphaPremultipliedLast);
  
  ,,,//第三步:空间变换
  ,,,//因为CoreGraphic的坐标系是右手系,原点在左下角
  ,,,//而UIKit中的坐标系是左手系,原点在左上角
  ,,,//所以经过下面的平移和缩放矩阵操作后,就符合界面图像基于左手系左上角的表示
  ,,,CGAffineTransform  translateTransform =, CGAffineTransformMakeTranslation(0,造);
  ,,,CGAffineTransform  scaleTransform =, CGAffineTransformMakeScale (1, 1);
  ,,,CGContextConcatCTM (ctx, CGAffineTransformConcat (translateTransform, scaleTransform));
  
  ,,,//第四步:在图像上下文中生成二维码位图
  ,,,//,draw  QR 提醒却;能够context ,,,
  ,,,(QRCodeGenerator  drawQRCode: code 上下文:ctx 尺寸:尺寸);
  
  ,,,//第五步:get  p_w_picpath
  ,,,CGImageRef  qrCGImage =, CGBitmapContextCreateImage (ctx);
  ,,,UIImage  *, qrImage =, [UIImage  p_w_picpathWithCGImage qrCGImage):;
  
  ,,,//第六步:some 版本
  ,,,CGContextRelease (ctx);
  ,,,CGImageRelease (qrCGImage);
  ,,,CGColorSpaceRelease(色彩);
  ,,,QRcode_free(代码);
  
  ,,,return  qrImage;
  }

主要是注意一下第三步,空间变换。<强>将右手系左下角原点变换到左手系统左上角的变换矩阵! !

4,名片格式:

百度百科对名片格式的详细说明

我们通过一个函数了解一下常用的格式(请见<强>代码注释):

<>之前——(NSString *), getVCardString   {   ,,,NSMutableString *, ret =, [[NSMutableString  alloc] init];      ,,,//名片规范:      ,,,//1,以开始:名片开头,结束:名片结束   ,,,(ret  appendString: @“开始:VCARD  \ n”);      ,,,//2,定义了很多关键字,具体请参考百度百科,本例子用到了其中一些比较重要的关键词      ,,,//3,一般格式为,key :,价值,例如下面,FN:随风而行之青山磊落险峰行   ,,,(ret  appendString: @“FN: ");   ,,,(ret  appendString: @“随风而行之青山磊落险峰行”);   ,,,(ret  appendString: @“\ n”);      ,,,//4,如果有子项目的话,使用,隔开,例如下面的电话电话包含移动电话细胞和公司电话工作或者家庭电话回家,而且也可以是语音、传真等等   ,,,(ret  appendString: @“电话;细胞;声音:“);   ,,,(ret  appendString: @“13900000000”);   ,,,(ret  appendString: @“\ n”);      ,,,(ret  appendString: @“电话;工作;声音:“);   ,,,(ret  appendString: @“021 - 12345678”);   ,,,(ret  appendString: @“\ n”);      ,,,//同上,电子邮件也有子项目   ,,,(ret  appendString: @“互联网电子邮件;参照:“);   ,,,(ret  appendString: @ 47178234 @qq.com”);   ,,,(ret  appendString: @“\ n”);      ,,,//5,一个搞了我几个小时的坑需要注意:,见到代码中,最后都添加了“\ n”符,是吧。   ,,,//,,,因为,如果行的长度超过了75个字符,那么必须分行   ,,,//,,,所以,保险期间,每一项都添加换行符   ,,,(ret  appendString: @“URL:”);   ,,,(ret  appendString: @“https://github.com/jackyblf”);   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

使用libqrencode库制作二维码电子名片——IOS版