当前位置: 移动技术网 > 移动技术>移动开发>IOS > iOS开发生成二维码图片(附中间带有小图标二维码)

iOS开发生成二维码图片(附中间带有小图标二维码)

2019年07月24日  | 移动技术网移动技术  | 我要评论

生成二维码图片也是项目中常用到的,二维码的扫描git上有很多好用的,这里主要说下二维码的生成

1.普通二维码

1.1 方法

/**
 生成二维码
 qrstering:字符串
 imagefloat:二维码图片大小
 */
+ (uiimage *)createqrcodewithstring:(nsstring *)qrstering withimgsize:(cgfloat)imagefloat;

1.2 方法实现

/**
 生成二维码
 qrstering:字符串
 imagefloat:二维码图片大小
 */
+ (uiimage *)createqrcodewithstring:(nsstring *)qrstring withimgsize:(cgfloat)imagefloat{
  cifilter *filter = [cifilter filterwithname:@"xiaoguige"];
  [filter setdefaults];
  nsstring *getstring = qrstring;
  nsdata *datastring = [getstring datausingencoding:nsutf8stringencoding];
  [filter setvalue:datastring forkey:@"inputmessage"];
  ///获取滤镜输出的图像
  ciimage *outimage = [filter outputimage];
  uiimage *imagev = [self imagewithimagesize:imagefloat withciiimage:outimage];
  //返回二维码图像
  return imagev;
}

2.中间带有小图标的二维码

2.1 方法

/**
 生成二维码(中间有小图片)
 qrstering:字符串
 centerimage:二维码中间的image对象
 */
+ (uiimage *)createimgqrcodewithstring:(nsstring *)qrstring centerimage:(uiimage *)centerimage;

2.2 方法实现

/**
 生成二维码(中间有小图片)
 qrstering:所需字符串
 centerimage:二维码中间的image对象
 */
+ (uiimage *)createimgqrcodewithstring:(nsstring *)qrstring centerimage:(uiimage *)centerimage{
  // 创建滤镜对象
  cifilter *filter = [cifilter filterwithname:@"xiaoguige"];
  // 恢复滤镜的默认属性
  [filter setdefaults];
  // 将字符串转换成 nsdata
  nsdata *datastring = [qrstring datausingencoding:nsutf8stringencoding];
  // 设置过滤器的输入值, kvc赋值
  [filter setvalue:datastring forkey:@"inputmessage"];
  // 获得滤镜输出的图像
  ciimage *outimage = [filter outputimage];
  // 图片小于(27,27),我们需要放大
  outimage = [outimage imagebyapplyingtransform:cgaffinetransformmakescale(20, 20)];
  // 将ciimage类型转成uiimage类型
  uiimage *startimage = [uiimage imagewithciimage:outimage];
  // 开启绘图, 获取图形上下文
  uigraphicsbeginimagecontext(startimage.size);
  // 把二维码图片画上去 (这里是以图形上下文, 左上角为(0,0)点
  [startimage drawinrect:cgrectmake(0, 0, startimage.size.width, startimage.size.height)];
  // 再把小图片画上去
  cgfloat icon_imagew = 200;
  cgfloat icon_imageh = icon_imagew;
  cgfloat icon_imagex = (startimage.size.width - icon_imagew) * 0.5;
  cgfloat icon_imagey = (startimage.size.height - icon_imageh) * 0.5;
  [centerimage drawinrect:cgrectmake(icon_imagex, icon_imagey, icon_imagew, icon_imageh)];
  // 获取当前画得的这张图片
  uiimage *qrimage = uigraphicsgetimagefromcurrentimagecontext();
  // 关闭图形上下文
  uigraphicsendimagecontext();
  //返回二维码图像
  return qrimage;
}

附加方法

/** 将ciimage转换成uiimage 并放大(内部转换使用)*/
+ (uiimage *)imagewithimagesize:(cgfloat)size withciiimage:(ciimage *)ciiimage{
  cgrect extent = cgrectintegral(ciiimage.extent);
  cgfloat scale = min(size/cgrectgetwidth(extent), size/cgrectgetheight(extent));
  // 1.创建bitmap;
  size_t width = cgrectgetwidth(extent) * scale;
  size_t height = cgrectgetheight(extent) * scale;
  cgcolorspaceref cs = cgcolorspacecreatedevicegray();
  cgcontextref bitmapref = cgbitmapcontextcreate(nil, width, height, 8, 0, cs, (cgbitmapinfo)kcgimagealphanone);
  cicontext *context = [cicontext contextwithoptions:nil];
  cgimageref bitmapimage = [context createcgimage:ciiimage fromrect:extent];
  cgcontextsetinterpolationquality(bitmapref, kcginterpolationnone);
  cgcontextscalectm(bitmapref, scale, scale);
  cgcontextdrawimage(bitmapref, extent, bitmapimage);
  // 2.保存bitmap到图片
  cgimageref scaledimage = cgbitmapcontextcreateimage(bitmapref);
  cgcontextrelease(bitmapref);
  cgimagerelease(bitmapimage);
  return [uiimage imagewithcgimage:scaledimage];
}

总结

以上所述是小编给大家介绍的ios开发生成二维码图片(附中间带有小图标二维码),希望对大家有所帮助

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网