iOS开发生成二维码图片(附中间带有小图标二维码)
程序员文章站
2023-12-20 16:08:22
生成二维码图片也是项目中常用到的,二维码的扫描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开发生成二维码图片(附中间带有小图标二维码),希望对大家有所帮助