这是本人第一次写博客,说实在话有点小紧张,说的不好的地方请担待!欢迎补充更改!
1.如何生成二维码
/**
* qrString 为二维码的URL(即扫描二维码后出来的东西)
* 返回一个CIImage
*/
- (CIImage *)createQRForString:(NSString *)qrString {
// 1.实例化二维码滤镜
CIFilter *filter = [CIFilterfilterWithName:@"CIQRCodeGenerator"];// name为固定的
// 2.恢复滤镜的默认属性 (因为滤镜有可能保存上一次的属性)
[filter setDefaults];
// 3.将字符串转换成NSdata
NSData *data = [qrStringdataUsingEncoding:NSUTF8StringEncoding];
// 4.通过KVC设置滤镜,传入data,将来滤镜就知道要通过传入的数据生成二维码
[filter setValue:data forKey:@"inputMessage"]; //key 为固定的
// 5.生成二维码
CIImage *outputImage = [filter outputImage];
return outputImage;
}
/**
* 当调用上边的方法后 会 生成一个CIImage 这时需要调用以下方法
* 返回一个Image (即二维码 黑白色)
*/
- (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 = [context createCGImage: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];
}
2.使用第三方库 libqrencode (纯C代码的一个库) 生成二维码 (使用较简单)
下载 1. libqrencode 库 这里就不提供下载地址了
2. 导入头文件 #import "QRCodeGenerator.h"
UIImageView * imageView = [[UIImageViewalloc] initWithFrame:CGRectMake(10,150, 300, 300)];
// 直接调用即可 URLstr:需要加载的信息
imageView.image = [QRCodeGeneratorqrImageForString:URLstr imageSize:250.f];
[self.viewaddSubview:imageView];
其实还有很多方式如: ZbarSDK 等等。看个人喜好了-(UIImage *)addImage:(UIImage *)image1 toImage:(UIImage *)image2
{
// image1 添加到 image2 上
UIGraphicsBeginImageContext(image2.size);
//Draw image2
[image2 drawInRect:CGRectMake(0,0, image2.size.width, image2.size.height)];
//Draw image1 addImage在toImage上的位置
[image1 drawInRect:CGRectMake(_logoOrigin_X,_logoOrigin_Y,_barcodeImaView.frame.size.height*SCALE_FACTOR-10,_barcodeImaView.frame.size.height*SCALE_FACTOR-10)];
//图像缩放
UIImage *resultImage=UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return resultImage;
}
// 注:这里合并两个Image后 Logo图像有点失真 (还请各位知道的进行补充,感谢浏览)