iOS-二维码和条形码的生成

调用的方法

- (void)refreshState{

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

// 2.恢复默认

[filter setDefaults];

// 3.给过滤器添加数据

NSString * dataString = @"hahahahhahahahahahahahahahahahhahahahahahaahha";

NSData  * data = [dataString dataUsingEncoding:NSUTF8StringEncoding];

// 4.通过KVO设置滤镜inputMessage数据

[filter setValue:data forKeyPath:@"inputMessage"];

// 4.获取输出的二维码

CIImage *outputImage = [filter outputImage];

//生成二维码

self.imgCodeQR.image = [TicketsCodeModel createNonInterpolatedUIImageFormCIImage:outputImage withSize:200];

//生成条形码

self.imgCodeBar.image = [TicketsCodeModel generateBarCode:@"1234948958096" width:200 height:100];

}

生成的方法


/**

* 根据CIImage生成指定大小的UIImage

*

* @param image CIImage

* @param size 图片宽度

*/

+ (UIImage *)createNonInterpolatedUIImageFormCIImage:(CIImage *)image withSize:(CGFloat) size

{

CGRect extent = CGRectIntegral(image.extent);

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

// 1.创建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);

// 2.保存bitmap到图片

CGImageRef scaledImage = CGBitmapContextCreateImage(bitmapRef);

CGContextRelease(bitmapRef);

CGImageRelease(bitmapImage);

return [UIImage imageWithCGImage:scaledImage];

}

+(UIImage*)generateBarCode:(NSString*)barCodeStr width:(CGFloat)width height:(CGFloat)height

{

// 生成二维码图片

CIImage *barcodeImage;

NSData *data = [barCodeStr dataUsingEncoding:NSISOLatin1StringEncoding allowLossyConversion:false];

CIFilter *filter = [CIFilter filterWithName:@"CICode128BarcodeGenerator"];

[filter setValue:data forKey:@"inputMessage"];

barcodeImage = [filter outputImage];

// 消除模糊

CGFloat scaleX = width / barcodeImage.extent.size.width; // extent 返回图片的frame

CGFloat scaleY = height / barcodeImage.extent.size.height;

CIImage *transformedImage = [barcodeImage imageByApplyingTransform:CGAffineTransformScale(CGAffineTransformIdentity, scaleX, scaleY)];

return [UIImage imageWithCIImage:transformedImage];

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • //图片水印效果 -(UIImage*)OriginImage:(UIImage *)image scaleToS...
    贪吃的猫cx阅读 1,188评论 0 4
  • Core Image是一个强大的框架,它能够让你轻松地对图像进行过滤。你能够通过修改图像的饱和度、色调或曝光率来获...
    木易林1阅读 1,161评论 0 1
  • 一、扫描 1、 ZBar ZBar在扫描的灵敏度上,和内存的使用上相对于ZXing上都是较优的,但是对于 “圆角二...
    空白Null阅读 1,090评论 0 2
  • iOS7之后,可以使用原生的CIFilter创建二维码。 一、生成二维码 首先是二维码的生成,使用CIFilter...
    _悟了个空阅读 563评论 0 1
  • 人杀人的原因会有什么呢? 大多是因为某件事情所以对某个人的仇恨吧。那种刺刀下带着血腥的冲动或者冷静的恶意。 杀人的...
    小白能邮寄阅读 217评论 0 0