手寫一個二維碼分享

生成一個二維碼的小demo,只需要傳入url網(wǎng)址就行了.

- (UIImage*)getImageWith:(NSString*)url{

// 1、創(chuàng)建濾鏡對象

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

//恢復(fù)濾鏡的默認(rèn)屬性

[filtersetDefaults];

// 2、設(shè)置數(shù)據(jù)

NSString*string_data = url;

//將字符串轉(zhuǎn)換成NSdata (雖然二維碼本質(zhì)上是字符串,但是這里需要轉(zhuǎn)換,不轉(zhuǎn)換就崩潰)

NSData*qrImageData = [string_datadataUsingEncoding:NSUTF8StringEncoding];

//設(shè)置過濾器的輸入值, KVC賦值

[filtersetValue:qrImageDataforKey:@"inputMessage"];

// 3、獲得濾鏡輸出的圖像

CIImage*outputImage = [filteroutputImage];

//圖片小于(27,27),我們需要放大

outputImage = [outputImageimageByApplyingTransform:CGAffineTransformMakeScale(20,20)];

// 4、將CIImage類型轉(zhuǎn)成UIImage類型

UIImage*start_image = [UIImageimageWithCIImage:outputImage];

// - - - - - - - - - - - - - - - -添加中間小圖標(biāo)- - - - - - - - - - - - - - - -

// 5、開啟繪圖,獲取圖形上下文(上下文的大小,就是二維碼的大小)

UIGraphicsBeginImageContext(start_image.size);

//把二維碼圖片畫上去(這里是以圖形上下文,左上角為(0,0)點

[start_imagedrawInRect:CGRectMake(0,0, start_image.size.width, start_image.size.height)];

//再把小圖片畫上去

NSString*icon_imageName =@"520";

UIImage*icon_image = [UIImageimageNamed:icon_imageName];

CGFloaticon_imageW =200;

CGFloaticon_imageH = icon_imageW;

CGFloaticon_imageX = (start_image.size.width- icon_imageW) *0.5;

CGFloaticon_imageY = (start_image.size.height- icon_imageH) *0.5;

[icon_imagedrawInRect:CGRectMake(icon_imageX, icon_imageY, icon_imageW, icon_imageH)];

// 6、獲取當(dāng)前畫得的這張圖片

UIImage*final_image =UIGraphicsGetImageFromCurrentImageContext();

// 7、關(guān)閉圖形上下文

UIGraphicsEndImageContext();

// 8、借助UIImageView顯示二維碼

return_qrCodeImage.image= final_image;

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

//NSData *data = [url dataUsingEncoding:NSUTF8StringEncoding];

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

//CIImage *outImage = filter.outputImage;

//CIContext *context = [CIContext contextWithOptions:nil];

//CGRect extent = outImage.extent;

//CGImageRef bitmapImage = [context createCGImage:outImage fromRect:extent];

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

//CGContextRef bitmapRef = CGBitmapContextCreate(nil, 250, 250, 8, 0, CGColorSpaceCreateDeviceGray(), (CGBitmapInfo)kCGImageAlphaNone);

//CGContextSetInterpolationQuality(bitmapRef, kCGInterpolationNone);

//CGContextScaleCTM(bitmapRef, scale, scale);

//CGContextDrawImage(bitmapRef, extent, bitmapImage);

//CGImageRef scaleImage = CGBitmapContextCreateImage(bitmapRef);

//CGContextRelease(bitmapRef);

//CGImageRelease(bitmapImage);

//return _qrCodeImage.image = [UIImage imageWithCGImage:scaleImage];

}

最后運(yùn)行結(jié)果如下圖:


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • //圖片水印效果 -(UIImage*)OriginImage:(UIImage *)image scaleToS...
    貪吃的貓cx閱讀 1,188評論 0 4
  • iOS7之后,可以使用原生的CIFilter創(chuàng)建二維碼。 一、生成二維碼 首先是二維碼的生成,使用CIFilter...
    _悟了個空閱讀 563評論 0 1
  • 一、掃描 1、 ZBar ZBar在掃描的靈敏度上,和內(nèi)存的使用上相對于ZXing上都是較優(yōu)的,但是對于 “圓角二...
    空白Null閱讀 1,090評論 0 2
  • Core Image是一個強(qiáng)大的框架,它能夠讓你輕松地對圖像進(jìn)行過濾。你能夠通過修改圖像的飽和度、色調(diào)或曝光率來獲...
    木易林1閱讀 1,159評論 0 1
  • 以前對iOS關(guān)于二維碼方面的知識掌握的比較零碎, 直到自己的一個關(guān)于支付方面iOS項目中有二維碼掃描界面、二維碼生...
    獻(xiàn)國閱讀 1,051評論 0 2