文档章节

iOS原生态二维码和条形码的生成

云上飞飞
 云上飞飞
发布于 2016/07/13 17:01
字数 448
阅读 102
收藏 0

直接上代码吧 

//
//  ViewController.m
//  原生态二维码的生成
//
//  Created by 士玉 on 16/7/13.
//  Copyright © 2016年 士玉. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@property (nonatomic, strong) UIImageView *imageView;
@property (nonatomic, strong) UIImageView *imageView2;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    self.imageView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, [UIScreen mainScreen].bounds.size.width/2.0, [UIScreen mainScreen].bounds.size.width/2.0)];
    [self.view addSubview:_imageView];

    self.imageView2 = [[UIImageView alloc]initWithFrame:CGRectMake(100, 400, [UIScreen mainScreen].bounds.size.width/2.0, [UIScreen mainScreen].bounds.size.width/2.0)];
    [self.view addSubview:_imageView2];
    self.imageView2.image = [self imageFromBarCode:@"65657567677756" size:1000];
    [self erweima];
}

- (UIImage *)imageFromBarCode:(NSString *)str size:(CGFloat)size {
    // 生成二维码图片
    CIImage *barcodeImage;
    NSData *data = [str dataUsingEncoding:NSISOLatin1StringEncoding allowLossyConversion:false];
    CIFilter *filter = [CIFilter filterWithName:@"CICode128BarcodeGenerator"];
    [filter setValue:data forKey:@"inputMessage"];
    barcodeImage = [filter outputImage];
    // 消除模糊
    return [self createNonInterpolatedUIImageFormCIImage:barcodeImage withSize:size];
}

- (void)erweima {
    //二维码滤镜
    CIFilter *filter=[CIFilter filterWithName:@"CIQRCodeGenerator"];
    //恢复滤镜的默认属性
    [filter setDefaults];
    //将字符串转换成NSData
    NSData *data = [@"二维码,你好啊!" dataUsingEncoding:NSUTF8StringEncoding];
    //通过KVO设置滤镜inputmessage数据
    [filter setValue:data forKey:@"inputMessage"];
    //获得滤镜输出的图像
    CIImage *outputImage = [filter outputImage];
    //将CIImage转换成UIImage,并放大显示
    _imageView.image = [self createNonInterpolatedUIImageFormCIImage:outputImage withSize:100.0];
    //如果还想加上阴影,就在ImageView的Layer上使用下面代码添加阴影
    _imageView.layer.shadowOffset = CGSizeMake(0, 0.5);//设置阴影的偏移量
    _imageView.layer.shadowRadius = 1;//设置阴影的半径
    _imageView.layer.shadowColor = [UIColor blackColor].CGColor;//设置阴影的颜色为黑色
    _imageView.layer.shadowOpacity = 0.3;
}

//改变二维码或条形码的大小,消除模糊
- (UIImage *)createNonInterpolatedUIImageFormCIImage:(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);
    return [UIImage imageWithCGImage:scaledImage];
    
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

 

© 著作权归作者所有

云上飞飞
粉丝 6
博文 131
码字总数 105112
作品 0
黄浦
程序员
私信 提问
加载中

评论(1)

云上飞飞
云上飞飞 博主
0
iOS使用系统API扫描二维码条形码&限制扫描区域

SuperScanner QRScanner BarCodeScanner 二维码条形码扫描 iOS二维码条形码扫描,支持iOS7+,限制扫描区域,提高扫描速度 iOS使用系统API进行二维码条形码扫描&限制扫描区域 ---GitHub看了不...

JeansH
2015/10/20
2K
0
使用iOS原生二维码扫描做开发,有的条形码扫描不出来

使用iOS原生二维码扫描做开发,扫描二维码没有问题,扫描条形码有的可以扫出来,但有的条形码扫描不出来是什么原因? output.metadataObjectTypes = output.availableMetadataObjectTypes 已经设...

zhunjiee
2016/05/19
607
1
iOS雪花动画、音频图、新闻界面框架、2048游戏、二维码条形码扫码生成等源码

iOS精选源码 粒子雪花与烟花的动画(http://www.code4app.com/thread-31557-1-1.html) iOS 2048游戏(http://www.code4app.com/thread-31558-1-1.html) JHSoundWaveView - 简单地声波图、音波图......

Android爱开源
2018/12/26
32
0
迈绝伦团队工作汇总

项目负责人:余志恒 up_java后台:暂无更新 mz_java后台:完善建材发布功能 bwk后台:暂无更新 项目负责人:季景胜 up_Android:暂无更新 upzg_Android:暂无更新 mzqk_Android:新增会员兑换...

风化的骆驼
2016/12/09
3
0
迈绝伦团队工作汇总

项目负责人:余志恒 up_java后台:暂无更新 mz_java后台:图形化统计数据功能完善,修复会员期限兑换码问题 bwk后台:暂无更新 项目负责人:季景胜 up_Android:暂无更新 upzg_Android:暂无更...

风化的骆驼
2016/12/08
2
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
1K
12
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
38
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
40
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
61
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部