欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2023-12-18 10:26:28
生成二维码图片也是项目中常用到的,二维码的扫描git上有很多好用的,这里主要说下二维码的生成 1.普通二维码 1.1 方法 /** 生成二维码 qrs...

生成二维码图片也是项目中常用到的,二维码的扫描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开发生成二维码图片(附中间带有小图标二维码),希望对大家有所帮助

上一篇:

下一篇: