//1.生成二维码
+ (CIImage *)createQRCodeFromString:(NSString *)str{
// 创建二维码
CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];//CICode128BarcodeGenerator
// 2. 恢复滤镜的默认属性
[filter setDefaults];
// 3. 将字符串转换成NSData
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
// 4. 通过KVO设置滤镜inputMessage数据
[filter setValue:data forKey:@"inputMessage"];
// 5. 获得滤镜输出的图像
CIImage *outputImage = [filter outputImage];
// 6. 将CIImage转换成UIImage,并放大显示,这种方式的图片可能比较模糊,见下面的处理步骤2
// UIImage* image = [UIImage imageWithCIImage:outputImage scale:0 orientation:UIImageOrientationUp];
return outputImage;
}
//2.调整图片到指定大小
+ (UIImage *)changeImageSizeWithCIImage:(CIImage *)ciImage andSize:(CGFloat)size{
CGRect extent = CGRectIntegral(ciImage.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 = [CIContext contextWithOptions:nil];
CGImageRef bitmapImage = [context createCGImage:ciImage fromRect:extent];
CGContextSetInterpolationQuality(bitmapRef, kCGInterpolationNone);
CGContextScaleCTM(bitmapRef, scale, scale);
CGContextDrawImage(bitmapRef, extent, bitmapImage);
// 保存bitmap到图片
CGImageRef scaledImage = CGBitmapContextCreateImage(bitmapRef);
CGContextRelease(bitmapRef);
CGImageRelease(bitmapImage);
return [UIImage imageWithCGImage:scaledImage];
}
//3.中间添加logo
- (UIImage *)addImageToSuperImage:(UIImage *)superImage withSubImage:(UIImage *)subImage andSubImagePosition:(CGRect)posRect{
UIGraphicsBeginImageContext(superImage.size);
[superImage drawInRect:CGRectMake(0, 0, superImage.size.width, superImage.size.height)];
//四个参数为水印图片的位置
[subImage drawInRect:posRect];
UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return resultingImage;
}
#4. 读取图片中的二维码
/**
* 读取图片中的二维码
*
* @param image 图片
*
* @return 图片中的二维码数据集合 CIQRCodeFeature对象
*/
+ (NSArray *)readQRCodeFromImage:(UIImage *)image{
// 创建一个CIImage对象
CIImage *ciImage = [[CIImage alloc] initWithCGImage:image.CGImage options:nil];
CIContext *context = [CIContext contextWithOptions:@{kCIContextUseSoftwareRenderer : @(YES)}]; // 软件渲染
CIDetector *detector = [CIDetector detectorOfType:CIDetectorTypeQRCode context:context options:@{CIDetectorAccuracy : CIDetectorAccuracyHigh}];// 二维码识别
// 注意这里的CIDetectorTypeQRCode
NSArray *features = [detector featuresInImage:ciImage];
// NSLog(@"features = %@",features); // 识别后的结果集
for (CIQRCodeFeature *feature in features) {
NSLog(@"msg = %@",feature.messageString); // 打印二维码中的信息
}
return features;
}
//5.截屏
/**
* 截图
*
* @param view 需要截取的视图
*
* @return 截图 图片
*/
+ (UIImage *)screenShotFormView:(UIView *)view
{
UIGraphicsBeginImageContextWithOptions(view.bounds.size, YES, [UIScreen mainScreen].scale);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return img;
}