iOS 二维码的生成

作者: 邵琼 | 来源:发表于2016-12-13 18:00 被阅读97次

    分享的内容,大家看了后,不管有什么问题或者建议,都可以说出来,我都会一一做答,一起加油啦

    我的后面两章文章<<iOS从相册读取二维码>>,<<iOS二维码的直接扫描的读取>>介意借鉴学习

    1.在需要生成二维码的界面.  

    ////// 生成二维码生成的数据-根据公司的要求形成相应的字符串

    NSDictionary *dataDictionary= [NSDictionary dictionaryWithObjectsAndKeys:@"PVTLfbmPU6FA01aD1XU20hkX38ew8Vh7Wg3JOXYDRsY=",@"ciphertext",@0,@"openTimes",@"2016-08-26 18:11:33",@"validFrom",@"2018-08-26 18:11:38",@"validTo",@"蓝牙钥匙",@"name",@"D5:CC:F1:13:92:7C",@"mac",@3,@"id",nil];

    //////将字典转为jsonString

    [self DataTOjsonString:dataDictionary];

    ///////就是具体的生成jsonString

    #pragma mark - 得到jsonString

    -(NSString*)DataTOjsonString:(id)object {

    NSError *error;

    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:object

    options:NSJSONWritingPrettyPrinted // Pass 0 if you don't care about the readability of the generated string

    error:&error];

    if (! jsonData) {

    NSLog(@"Got an error: %@", error);

    } else {

    _jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

    }

    return _jsonString;

    }

    //// 调用生成二维码的方法

    _shareView.img.scanResultImg.image = [self qrCodeImageWithString:_jsonString];

    /////具体生成二维码的方法

    #pragma mark - 生成二维码

    -(UIImage*)qrCodeImageWithString:(NSString*)str{

    if (str && [str isKindOfClass:[NSString class]] && str.length > 0) {

    return [self createNonInterpolatedUIImageFromCIImage :[self createQRForString:str]

    withSize:180];

    } else {

    NSLog(@"nil-----");

    }

    return nil;

    }

    // 传入字符串-形成二维码

    - (CIImage *)createQRForString:(NSString *)qrString

    {

    // Need to convert the string to a UTF-8 encoded NSData object

    NSData *stringData = [qrString dataUsingEncoding: NSUTF8StringEncoding];

    NSLog(@"--stringData--%@",stringData);

    // Create the filter

    CIFilter *qrFilter = [CIFilter filterWithName:@"CIQRCodeGenerator"];

    NSLog(@"----qrFilter---%@",qrFilter);

    // Set the message content and error-correction level

    [qrFilter setValue:stringData forKey:@"inputMessage"];

    [qrFilter setValue:@"L" forKey:@"inputCorrectionLevel"];

    NSLog(@"--qrFilter.outputImage%@----",qrFilter.outputImage);

    // Send the image back

    return qrFilter.outputImage;

    }

    - (UIImage *)createNonInterpolatedUIImageFromCIImage:(CIImage *)image withSize:(CGFloat) size

    {

    CGRect extent = CGRectIntegral(image.extent);

    CGFloat scale = MIN(size/CGRectGetWidth(extent), size/CGRectGetHeight(extent));

    // 创建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:image fromRect:extent];

    CGContextSetInterpolationQuality(bitmapRef, kCGInterpolationNone);

    CGContextScaleCTM(bitmapRef, scale, scale);

    CGContextDrawImage(bitmapRef, extent, bitmapImage);

    // 保存bitmap到图片

    CGImageRef scaledImage = CGBitmapContextCreateImage(bitmapRef);

    CGContextRelease(bitmapRef);

    CGImageRelease(bitmapImage);

    UIImage *img = [UIImage imageWithCGImage:scaledImage];

    if (img) {

    [self tapSaveImageToIphone:img];

    return img;

    } else {

    return nil;

    }

    }

    // 保存图片到相册

    - (void)tapSaveImageToIphone:(UIImage *)img{

    /**

    *  将图片保存到iPhone本地相册

    *  UIImage *image            图片对象

    *  id completionTarget      响应方法对象

    *  SEL completionSelector    方法

    *  void *contextInfo

    */

    UIImageWriteToSavedPhotosAlbum(img, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);

    }

    // 相册存入成功回调

    - (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void*)contextInfo{

    //    if (error == nil) {

    //

    //        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:@"已存入手机相册" delegate:self cancelButtonTitle:nil otherButtonTitles:@"确定", nil, nil];

    //        [alert show];

    //

    //    }else{

    //

    //        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:@"保存失败" delegate:self cancelButtonTitle:nil otherButtonTitles:@"确定", nil ,nil];

    //        [alert show];

    //    }

    }

    相关文章

      网友评论

      • 你好牛: 楼主 这个键值对 代码的什么意思 是你自定义的 还是系统的 一种功能
        [qrFilter setValue:@"L" forKey:@"inputCorrectionLevel"];
        邵琼:@你好牛 设置扫描的纠错程度,L表示low,低纠错率.这样扫描到的概率就会提高.一般二维码如果扫描的内容较多时,都会设置为L.当然还有其他的等级,如M中等,H高等,根据你的需求
        你好牛:@邵琼 你好 具体是有什么用的呢
        邵琼:@你好牛 系统的一种类型

      本文标题:iOS 二维码的生成

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