iOS-二維碼和條形碼的生成

調(diào)用的方法

- (void)refreshState{

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

// 2.恢復(fù)默認(rèn)

[filter setDefaults];

// 3.給過(guò)濾器添加數(shù)據(jù)

NSString * dataString = @"hahahahhahahahahahahahahahahahhahahahahahaahha";

NSData? * data = [dataString dataUsingEncoding:NSUTF8StringEncoding];

// 4.通過(guò)KVO設(shè)置濾鏡inputMessage數(shù)據(jù)

[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];

}

生成的方法


/**

* 根據(jù)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.創(chuàng)建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];

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • //圖片水印效果 -(UIImage*)OriginImage:(UIImage *)image scaleToS...
    貪吃的貓cx閱讀 1,314評(píng)論 0 4
  • Core Image是一個(gè)強(qiáng)大的框架,它能夠讓你輕松地對(duì)圖像進(jìn)行過(guò)濾。你能夠通過(guò)修改圖像的飽和度、色調(diào)或曝光率來(lái)獲...
    木易林1閱讀 1,205評(píng)論 0 1
  • 一、掃描 1、 ZBar ZBar在掃描的靈敏度上,和內(nèi)存的使用上相對(duì)于ZXing上都是較優(yōu)的,但是對(duì)于 “圓角二...
    空白Null閱讀 1,143評(píng)論 0 2
  • iOS7之后,可以使用原生的CIFilter創(chuàng)建二維碼。 一、生成二維碼 首先是二維碼的生成,使用CIFilter...
    _悟了個(gè)空閱讀 583評(píng)論 0 1
  • 人殺人的原因會(huì)有什么呢? 大多是因?yàn)槟臣虑樗詫?duì)某個(gè)人的仇恨吧。那種刺刀下帶著血腥的沖動(dòng)或者冷靜的惡意。 殺人的...
    小白能郵寄閱讀 282評(píng)論 0 0

友情鏈接更多精彩內(nèi)容