实用知识:生成二维码或条形码

#import "ViewController.h"
// 二维码, 主要通过CoreImage框架来实现的
#import <CoreImage/CoreImage.h>
#import "UIImage+QRCode.h"

@interface ViewController ()

// 滤镜, 生成二维码的滤镜
@property (strong, nonatomic) CIFilter *filter;

@property (weak, nonatomic) IBOutlet UIImageView *imageView;

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self code128Test];
    [self QRCodeTest];
}

// 二维码
- (void)QRCodeTest {

    // 二维码不需要全部都扫描到, 可以挡掉一部分, 不超20%~30%
    // 三个矩形是二维码识别的关键, 不可以挡掉任何一个矩形

    // 1. 创建二维码滤镜
    // 1.1 查找可用的滤镜, kCICategoryBuiltIn 系统内建
    NSArray <NSString *> *filerNames = [CIFilter filterNamesInCategory:kCICategoryBuiltIn];
    NSLog(@"%@", filerNames);
    self.filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];

    // 2. 配置输入参数, 二维码的内容
    NSLog(@"%@", self.filter.inputKeys);

    // inputMessage Key是二维码的内容, 类型是NSData
    NSString *content = @"Hi, man, you are good! 才怪咧!Hi, man, you are good! 才怪咧!Hi, man, you are good! 才怪咧!";

    NSData *data = [content dataUsingEncoding:NSUTF8StringEncoding];
    [self.filter setValue:data forKey:@"inputMessage"];

    // 3. 获取滤镜输出的图片
//    NSLog(@"%@", self.filter.outputKeys);
    CIImage *ciImage = self.filter.outputImage;

    NSLog(@"%@", NSStringFromCGSize(ciImage.extent.size));
    // 对 图片 进入形变放大
    ciImage = [ciImage imageByApplyingTransform:CGAffineTransformMakeScale(10, 10)];
    NSLog(@"%@", NSStringFromCGSize(ciImage.extent.size));
    // CI -> UI
    UIImage *image = [UIImage imageWithCIImage:ciImage];
    image = [image imageWithIcon:[UIImage imageNamed:@"shuai.JPG"]];

    self.imageView.image = image;
}

// 条形码
- (void)code128Test
{
    self.filter = [CIFilter filterWithName:@"CICode128BarcodeGenerator"];

    NSString *content = @"687874837";
    NSData *data = [content dataUsingEncoding:NSUTF8StringEncoding];
    [self.filter setValue:data forKey:@"inputMessage"];

    CIImage *ciImage = self.filter.outputImage;
    UIImage *image = [UIImage imageWithCIImage:ciImage];
    self.imageView.image = image;
}

@end
#import <UIKit/UIKit.h>

@interface UIImage (QRCode)

- (UIImage *)imageWithIcon:(UIImage *)icon;

@end






#import "UIImage+QRCode.h"

@implementation UIImage (QRCode)

- (UIImage *)imageWithIcon:(UIImage *)icon
{
    UIGraphicsBeginImageContext(self.size);

    // 1. 画二维码
    [self drawInRect:CGRectMake(0, 0, self.size.width, self.size.height)];

    // 2. 画头像 (头像 20% * 20%)
    CGFloat wh = self.size.width * 0.2;
    CGRect iconRect = CGRectMake((self.size.width - wh) * 0.5, (self.size.height - wh) * 0.5, wh, wh);

    [icon drawInRect:iconRect];

    // 3. 拿图片
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    return newImage;
}

@end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值