• 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;

    }

  • 相关阅读:
    JAVA高级编程数据源datasource

    编写自己的JDBC框架
    libevent带负载均衡的多线程使用示例
    游戏数据分析-基本指标
    学习日记-----各种问题
    学习日记-----ORM
    【转】Delphi利用系统环境变量获取常用系统目录
    [转]Delphi多线程编程入门(二)——通过调用API实现多线程
    [转]Delphi多线程编程入门(一)
  • 原文地址:https://www.cnblogs.com/diweinan/p/6246405.html
Copyright © 2020-2023  润新知