//聯(lián)系人:石虎QQ: 1224614774昵稱:嗡嘛呢叭咪哄
#import"SHCodeTableViewCell.h"
#import"SHQRCodeView.h"http://導(dǎo)入生成二維碼封裝類名
@interfaceXHCFCodeTableViewCell()
//全局的二維碼類名
@property(nonatomic,strong)SHQRCodeView*qrCodeView;
@end
@implementationSHCodeTableViewCell
- (void)viewDidLoad {
[superviewDidLoad];
//調(diào)用自定義創(chuàng)建二維碼方法\添加二維碼URL
[selfsetCreateTwoDimensionalCode:@"http://www.lxweimin.com/u/ff32105744ef"];
}
#pragma mark -創(chuàng)建二維碼
- (void)setCreateTwoDimensionalCode:(NSString*)stringCode
{
//1.初始化SHQRCodeView方法封裝
self.qrCodeView= [[SHQRCodeViewalloc]init];
//2.生成一個(gè)CIImage的二維碼,并且控制圖片的大小
UIImage*qrcode = [self.qrCodeViewcreateNonInterpolatedUIImageFormCIImage:[self.qrCodeViewcreateQRForString:stringCode]withSize:250.0f];
//3.把CIImage二維碼 添加到自定義的customQrcode圖片中,并且設(shè)置顏色
UIImage*customQrcode = [self.qrCodeViewimageBlackToTransparent:qrcodewithRed:60.0fandGreen:74.0fandBlue:89.0f];
//4.用自定義customQrcode顯示在界面上
self.imageCode.image= customQrcode;
//5.如果還想加上陰影,就在ImageView的Layer上使用下面代碼添加陰影:
//5.1設(shè)置陰影的偏移量
self.imageCode.layer.shadowOffset=CGSizeMake(0,2);
//5.2設(shè)置陰影的半徑
self.imageCode.layer.shadowRadius=2;
//5.3設(shè)置陰影的顏色為黑色
self.imageCode.layer.shadowColor= [UIColorblackColor].CGColor;
//5.4設(shè)置陰影的不透明度
self.imageCode.layer.shadowOpacity=3;
}
注意:以下的代碼是自己封裝好的生成二維碼,只要把下面的. h和. m 文件復(fù)制到項(xiàng)目的類中即可.
如圖片:http://img.blog.csdn.net/20170602174259983?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2hpaHVib2tl/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
*************** 自封裝的生成二維碼類.h文件 ?*******************
//? Created by石虎on 16/5/10.
//? Copyright ? 2016年shih. All rights reserved.
#import
@interfaceSHQRCodeView :UIView
/**
因?yàn)樯傻亩S碼是一個(gè)CIImage,我們直接轉(zhuǎn)換成UIImage的話大小不好控制,所以使用下面方法返回需要大小的UIImage:
*/
- (UIImage*)createNonInterpolatedUIImageFormCIImage:(CIImage*)image withSize:(CGFloat) size ;
/**
因?yàn)樯傻亩S碼是黑白的,所以還要對(duì)二維碼進(jìn)行顏色填充,并轉(zhuǎn)換為透明背景,使用遍歷圖片像素來更改圖片顏色,
*/
- (UIImage*)imageBlackToTransparent:(UIImage*)image withRed:(CGFloat)red andGreen:(CGFloat)green andBlue:(CGFloat)blue;
/**
首先是二維碼的生成,使用CIFilter很簡單,直接傳入生成二維碼的字符串即可:
*/
- (CIImage*)createQRForString:(NSString*)qrString;
@end
*************** 自封裝的生成二維碼類.m文件 ?*******************
//? Created by石虎on 16/5/10.
//? Copyright ? 2016年shih. All rights reserved.
//
#import"SHQRCodeView.h"
@interfaceSHQRCodeView()
@end
@implementationSHQRCodeView
- (UIImage*)createNonInterpolatedUIImageFormCIImage:(CIImage*)image withSize:(CGFloat) size {
CGRectextent =CGRectIntegral(image.extent);
CGFloatscale =MIN(size/CGRectGetWidth(extent), size/CGRectGetHeight(extent));
//創(chuàng)建bitmap;
size_twidth =CGRectGetWidth(extent) * scale;
size_theight =CGRectGetHeight(extent) * scale;
CGColorSpaceRefcs =CGColorSpaceCreateDeviceGray();
CGContextRefbitmapRef =CGBitmapContextCreate(nil, width, height,8,0, cs, (CGBitmapInfo)kCGImageAlphaNone);
CIContext*context = [CIContextcontextWithOptions:nil];
CGImageRefbitmapImage = [contextcreateCGImage:imagefromRect:extent];
CGContextSetInterpolationQuality(bitmapRef,kCGInterpolationNone);
CGContextScaleCTM(bitmapRef, scale, scale);
CGContextDrawImage(bitmapRef, extent, bitmapImage);
//保存bitmap到圖片
CGImageRefscaledImage =CGBitmapContextCreateImage(bitmapRef);
// Cleanup
CGContextRelease(bitmapRef);
CGImageRelease(bitmapImage);
return[UIImageimageWithCGImage:scaledImage];
}
- (CIImage*)createQRForString:(NSString*)qrString {
//需要將字符串轉(zhuǎn)換為UTF-8編碼的NSData對(duì)象
NSData*stringData = [qrStringdataUsingEncoding:NSUTF8StringEncoding];
//創(chuàng)建filter
CIFilter*qrFilter = [CIFilterfilterWithName:@"CIQRCodeGenerator"];
//設(shè)置內(nèi)容和糾錯(cuò)級(jí)別
[qrFiltersetValue:stringDataforKey:@"inputMessage"];
[qrFiltersetValue:@"M"forKey:@"inputCorrectionLevel"];
// Send the image back
returnqrFilter.outputImage;
}
voidProviderReleaseData (void*info,constvoid*data,size_tsize){
free((void*)data);
}
- (UIImage*)imageBlackToTransparent:(UIImage*)image withRed:(CGFloat)red andGreen:(CGFloat)green andBlue:(CGFloat)blue{
constintimageWidth = image.size.width;
constintimageHeight = image.size.height;
size_tbytesPerRow = imageWidth *4;
uint32_t* rgbImageBuf = (uint32_t*)malloc(bytesPerRow * imageHeight);
// create context
CGColorSpaceRefcolorSpace =CGColorSpaceCreateDeviceRGB();
CGContextRefcontext =CGBitmapContextCreate(rgbImageBuf, imageWidth, imageHeight,8, bytesPerRow, colorSpace,
kCGBitmapByteOrder32Little|kCGImageAlphaNoneSkipLast);
CGContextDrawImage(context,CGRectMake(0,0, imageWidth, imageHeight), image.CGImage);
//遍歷像素
intpixelNum = imageWidth * imageHeight;
uint32_t* pCurPtr = rgbImageBuf;
for(inti =0; i < pixelNum; i++, pCurPtr++){
if((*pCurPtr &0xFFFFFF00) <0x99999900){
//改成下面的代碼,會(huì)將圖片轉(zhuǎn)成想要的顏色
uint8_t* ptr = (uint8_t*)pCurPtr;
ptr[3] = red;//0~255
ptr[2] = green;
ptr[1] = blue;
}else{
uint8_t* ptr = (uint8_t*)pCurPtr;
ptr[0] =0;
}
}
//輸出圖片
CGDataProviderRefdataProvider =CGDataProviderCreateWithData(NULL, rgbImageBuf, bytesPerRow * imageHeight,ProviderReleaseData);
CGImageRefimageRef =CGImageCreate(imageWidth, imageHeight,8,32, bytesPerRow, colorSpace,
kCGImageAlphaLast|kCGBitmapByteOrder32Little, dataProvider,
NULL,true,kCGRenderingIntentDefault);
CGDataProviderRelease(dataProvider);
UIImage* resultUIImage = [UIImageimageWithCGImage:imageRef];
//清理空間
CGImageRelease(imageRef);
CGContextRelease(context);
CGColorSpaceRelease(colorSpace);
returnresultUIImage;
}