生成二维码
来源:互联网 发布:jdbc mysql原理 编辑:程序博客网 时间:2024/05/15 08:39
生成二维码
- (void)viewDidLoad {
[superviewDidLoad];
self.imgView = [[UIImageViewalloc] initWithFrame:CGRectMake(20,20, 300, 300)];
// imgView.backgroundColor = [UIColor redColor];
[self.viewaddSubview: self.imgView];
//创建过滤器
CIFilter * filter = [CIFilterfilterWithName:@"CIQRCodeGenerator"];
//设置默认
[filter setDefaults];
//过滤器添加数据
NSString * dataString =@"wlwlwlwlwlwlwll";
NSData * data = [dataStringdataUsingEncoding:NSUTF8StringEncoding];
[filter setValue:dataforKeyPath:@"inputMessage"];
//获取输出的二维码
CIImage * img = [filteroutputImage];
//设置img的像素
UIImage * img1 =[selfcreateNonInterpolatedUIImageFormCIImage:imgwithSize:1000];
//设置img的颜色
self.imgView.image = [self imageBlackToTransparent:img1 withRed:255andGreen:0andBlue:0];
}
//因为生成的二维码是一个CIImage,我们直接转换成UIImage的话大小不好控制,所以使用下面方法返回需要大小的UIImage:
- (UIImage *)createNonInterpolatedUIImageFormCIImage:(CIImage *)image withSize:(CGFloat) size {
CGRect extent =CGRectIntegral(image.extent);
CGFloat scale =MIN(size/CGRectGetWidth(extent), size/CGRectGetHeight(extent));
// 创建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 = [CIContextcontextWithOptions:nil];
CGImageRef bitmapImage = [contextcreateCGImage:image fromRect:extent];
CGContextSetInterpolationQuality(bitmapRef,kCGInterpolationNone);
CGContextScaleCTM(bitmapRef, scale, scale);
CGContextDrawImage(bitmapRef, extent, bitmapImage);
// 保存bitmap到图片
CGImageRef scaledImage =CGBitmapContextCreateImage(bitmapRef);
CGContextRelease(bitmapRef);
CGImageRelease(bitmapImage);
return [UIImageimageWithCGImage:scaledImage];
}
//3.设置图片透明度
void ProviderReleaseData (void *info,const void *data,size_t size){
free((void*)data);
}
- (UIImage*)imageBlackToTransparent:(UIImage*)image withRed:(CGFloat)red andGreen:(CGFloat)green andBlue:(CGFloat)blue{
constint imageWidth = image.size.width;
constint imageHeight = image.size.height;
size_t bytesPerRow = imageWidth *4;
uint32_t* rgbImageBuf = (uint32_t*)malloc(bytesPerRow * imageHeight);
CGColorSpaceRef colorSpace =CGColorSpaceCreateDeviceRGB();
CGContextRef context =CGBitmapContextCreate(rgbImageBuf, imageWidth, imageHeight,8, bytesPerRow, colorSpace,
kCGBitmapByteOrder32Little |kCGImageAlphaNoneSkipLast);
CGContextDrawImage(context,CGRectMake(0,0, imageWidth, imageHeight), image.CGImage);
// 遍历像素
int pixelNum = imageWidth * imageHeight;
uint32_t* pCurPtr = rgbImageBuf;
for (int i =0; i < pixelNum; i++, pCurPtr++){
if ((*pCurPtr &0xFFFFFF00) < 0x99999900) // 将白色变成透明
{
// 改成下面的代码,会将图片转成想要的颜色
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;
}
}
// 输出图片
CGDataProviderRef dataProvider =CGDataProviderCreateWithData(NULL, rgbImageBuf, bytesPerRow * imageHeight,ProviderReleaseData);
CGImageRef imageRef =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);
return resultUIImage;
}
- java二维码 生成二维码
- 生成二维码、识别二维码
- 扫描二维码+生成二维码
- 生成二维码、自定义二维码
- 生成二维码
- 二维码生成
- 二维码生成
- 生成二维码
- 二维码生成
- 二维码生成
- 生成二维码
- 二维码生成
- 生成二维码
- 二维码--生成
- 生成二维码
- 生成二维码
- 二维码生成
- 生成二维码
- LeetCode113. Path Sum II
- jQuery--效果|动画
- usleep函数
- IE兼容性
- PAT BASIC LEVEL 1031. 查验身份证(15)
- 生成二维码
- PAT BASIC LEVEL 1032. 挖掘机技术哪家强(20)
- 欢迎使用CSDN-markdown编辑器
- 初学者SSM框架的创建过程
- js中判断为{} 和 null
- Number()函数
- 网管的自我修养-网络系统
- redis 基础命令
- AFNetworking 状态栏小菊花