美文网首页
生成动态二维码

生成动态二维码

作者: 初心_13bc | 来源:发表于2017-05-03 17:51 被阅读0次

    生成动态二维码

    因为最近遇到需要一个生成二维码的功能,于是我就接触了一下,现将我实现的步骤分享一下。

    首先需要再网上下载一个生成二维码的三方库 qrencode ,点击二维码生成库下载。里面有提供生成二维码的API,返回 QRcode。

    制作二维码的API

    注:string:需要编码的字符串内容;version:版本(大小等级1~40);level:容错等级;hint:二维码模式。

    实现代码:

    新建一个 #import "UIImage+QRCodeGenerator.h";

    在 .m 文件里实现

    +(UIImage *)QRCodeGenerator:(NSString *)data andQuietZone (NSInteger)iQuietZone andSize:(NSInteger)iSize 

    {

           UIImage *ret = nil;

           QRcode *qr = QRcode_encodeString([data      UIT8String]),0,QR_ECLEVEL_M,QR_MODE_8,1);

           NSInteger logQRSize = qr->width;

           NSInteger phyQRSize = logQRSize + (2 * iQuietZone);

           NSInteger scale    = iSize / phyQRSize;

           NSInteger imgSize  = phyQRSize * scale;

          if ( scale < 1 )

             scale = 1;

          {

                 UIGraphicsBeginImageContext(CGSizeMake(imgSize,imgSize));

                 CGContextRef ctx = UIGraphicsGetCurrentContext();

                 CGRect bounds = CGRectMake(0,0,imgSize,imgSize);

                 CGContextSetFillColorWithColor(ctx,[UIColor whiteColor].CGColor);

                 CGContextFillRect(ctx,bounds);

                // set any 'dark' colour pixels     

               {         

                     int x,y;                 

                    CGContextSetFillColorWithColor(ctx,[UIColor blackColor].CGColor);                 

                   for ( y=0 ; ydata[(y*logQRSize)+x] & 1 )

                  CGContextFillRect(ctx,CGRectMake((iQuietZone+x)*scale,     (iQuietZone+y)*scale,scale,scale));

               }

             // generate the UIImage

            CGImageRef imgRef = CGBitmapContextCreateImage(ctx);

            ret = [UIImage imageWithCGImage:imgRef];

           CGImageRelease(imgRef);

           UIGraphicsEndImageContext();

        }

    QRcode_free(qr);

    return ret;

       }

    }

    结果:

    相关文章

      网友评论

          本文标题:生成动态二维码

          本文链接:https://www.haomeiwen.com/subject/bwcltxtx.html