iOS开发 二维码生成

基于libqrencode的二维码生成

+ (void)drawQRCode:(QRcode *)code context:(CGContextRef)ctx size:(CGFloat)size {

unsigned char *data = 0;

int width;

data = code->data;

width = code->width;

float zoom = (double)size / (code->width + 2.0 * qr_margin);

CGRect rectDraw = CGRectMake(0, 0, zoom, zoom);

 

// draw

CGContextSetFillColor(ctx, CGColorGetComponents([UIColor blackColor].CGColor));

for(int i = 0; i < width; ++i) {

for(int j = 0; j < width; ++j) {

if(*data & 1) {

rectDraw.origin = CGPointMake((j + qr_margin) * zoom,(i + qr_margin) * zoom);

CGContextAddRect(ctx, rectDraw);

}

++data;

}

}

CGContextFillPath(ctx);

}

 

+ (UIImage *)qrImageForString:(NSString *)string imageSize:(CGFloat)size {

if (![string length]) {

return nil;

}

 

QRcode *code = QRcode_encodeString([string UTF8String], 0, QR_ECLEVEL_L, QR_MODE_8, 1);

if (!code) {

return nil;

}

 

// create context

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

CGContextRef ctx = CGBitmapContextCreate(0, size, size, 8, size * 4, colorSpace, kCGImageAlphaPremultipliedLast);

 

CGAffineTransform translateTransform = CGAffineTransformMakeTranslation(0, -size);

CGAffineTransform scaleTransform = CGAffineTransformMakeScale(1, -1);

CGContextConcatCTM(ctx, CGAffineTransformConcat(translateTransform, scaleTransform));

 

// draw QR on this context

[QRCodeGenerator drawQRCode:code context:ctx size:size];

 

// get image

CGImageRef qrCGImage = CGBitmapContextCreateImage(ctx);

UIImage * qrImage = [UIImage imageWithCGImage:qrCGImage];

 

// some releases

CGContextRelease(ctx);

CGImageRelease(qrCGImage);

CGColorSpaceRelease(colorSpace);

QRcode_free(code);

 

return qrImage;

}

 

posted @ 2017-01-03 20:46  D-Ben  阅读(299)  评论(0编辑  收藏  举报