5 var ciImage:CIImage! 6 var videoLayer:CALayer! 7 var imageView:UIImageView! 63 var ciImage = CIImage(cvPixelBuffer:imgBuffer) 64 65 self.filter.setValue(ciImage, forKey: kCIInputImageKey == UIDeviceOrientation.portrait { 73 ciImage = ciImage.applying(CGAffineTransform(rotationAngle: = ciImage.applying(CGAffineTransform(rotationAngle: CGFloat(M_PI))) 77 } 78 79 self.ciImage = ciImage :self.ciImage) 94 }
给图片增加滤镜有这两种方式: CoreImage / openGLES Cirelmage 下面先说明如何使用CoreImage给图片添加滤镜, 主要为以下步骤: #1.导入CIImage格式的原始图片 #2.创建CIFilter滤镜 #3.用CIContext将滤镜中的图片渲染出来 #4.导出渲染后的图片 参考代码: 1 //导入CIImage 2 CIImage *ciImage = [[CIImage alloc] initWithImage:[UIImage imageNamed:@"hua"]]; 3 4 //创建出Filter滤镜 5 CIFilter 2 CIImage *ciImage = [[CIImage alloc] initWithImage:[UIImage imageNamed:@"hua.jpeg"]]; 3 *ciImage = [[CIImage alloc] initWithImage:showImage]; 20 21 CIFilter *filter = [CIFilter filterWithName
CIImage有几种初始化方法,包括:CIImage(CIImage(contentsOf: ),CIImage(data :),CIImage(CGImage :),CIImage(bitmapData 2、接下来,使用CIImage(contentsOf: )构造函数创建您的CIImage。
3、接下来,您将创建您的CIFilter对象。 该UIImage(ciImage:)构造函数转换了CIImage到UIImage。 var beginImage: CIImage! 一旦你改变了这个值,你需要重复几个步骤:
1、从CIFilter获取输出CIImage。
2、将CIImage转换为CGImage。
// 图像分析请求 lazy var imageRequestHandler = VNImageRequestHandler(ciImage: CIImage(cgImage: image.cgImage [] { // 创建CIImage实例 let ciImage = CIImage(cvPixelBuffer: result.pixelBuffer) 默认返回的蒙版为黑白两色,这里讲所有黑色替换成透明色 let filter = CIFilter(name: "CIMaskToAlpha", parameters: [kCIInputImageKey: ciImage [] { print(result.pixelBuffer) let ciImage = CIImage(cvPixelBuffer: result.pixelBuffer ) let filter = CIFilter(name: "CIMaskToAlpha", parameters: [kCIInputImageKey: ciImage
mainBundle] pathForResource:@"1" ofType:@"jpg"]; NSURL* fileUrl = [NSURL fileURLWithPath:localPath]; CIImage * image = [CIImage imageWithContentsOfURL:fileUrl]; CIContext* context = [CIContext contextWithOptions " keysAndValues:kCIInputImageKey,image,@"inputIntensity", [NSNumber numberWithFloat:0.99],nil]; CIImage CIAttributeType = CIAttributeTypeImage; }; inputImage = { CIAttributeClass = CIImage CIAttributeFilterName = CIAffineTransform; inputImage = { CIAttributeClass = CIImage
attributes as Any) #endif // 输入CIImage let input = CIImage(cgImage: image) // 输出CIImage let output = input.applyingFilter(name, parameters: parameters) // 渲染图片(CIImage->CGImage) guard let cgimage = CIContext(options: nil).createCGImage(output, from
CIImage. 这个类持有图片数据。可以用UIImage或者图片路径或者data来创建一个CIImage对象。 譬如:CIImage(contentsOfURL:), CIImage(data:), CIImage(CGImage:), CIImage(bitmapData:bytesPerRow:size:format :colorSpace:),用的最多的是CIImage(contentsOfURL:)。 滤镜会输出一个CIImage对象,用CIContext 可以将CIImage转换为UIImage。 这里有一个示例: func oldPhoto(img: CIImage, withAmount intensity: Float) -> CIImage { /
= nil) // 获取识别特征 open func features(in image: CIImage) -> [CIFeature] open func features( in image: CIImage, options: [String : Any]? UIImage // 2.生成CIImage let ciimage = CIImage(cgImage: image!.cgImage!) features(in: ciimage, options: nil) // 遍历出二维码 for item in features!
testImage.image.size.height)]; [self.view addSubview:testImage]; 识别图片: CIImage * ciimage = [CIImage imageWithCGImage:image.CGImage]; NSDictionary* opts = [NSDictionary dictionaryWithObject context:nil options:opts]; NSArray* features = [detector featuresInImage:ciimage
image) 10 imageView.center = CGPoint(x:160, y:260) 11 self.view.addSubview(imageView) 12 13 let ciImage = CIImage(image:image!) context:ciContext, options: [CIDetectorAccuracy:CIDetectorAccuracyHigh]) 16 17 let ciImageSize = ciImage features(in: ciImage!)
image filterName:(NSString *)name { CIContext *context = [CIContext contextWithOptions:nil]; CIImage *inputImage = [[CIImage alloc] initWithImage:image]; CIFilter *filter = [CIFilter filterWithName :name]; [filter setValue:inputImage forKey:kCIInputImageKey]; CIImage *result = [filter valueForKey *inputImage = [[CIImage alloc] initWithImage:image]; CIFilter *filter; if (name.length ! CIMedianFilter"]) { [filter setValue:@(radius) forKey:@"inputRadius"]; } CIImage
(image: NSImage) -> CIImage? from imageRep let ciImage: CIImage = CIImage(bitmapImageRep: imageRep)! transform.setValue(ciImage, forKey: "inputImage") transform.setValue(affineTransform, forKey: "inputTransform") // get the new CIImage, flipped and ready to serve let result: CIImage CIImage return result; } } 4、示例代码 界面布局及效果展示代码 import SwiftUI struct TestImageDemo: View
imageView = UIImageView(image:image) 13 14 let filter = CIFilter(name:“CIColorMonochrome”) 15 let ciImage = CIImage(image:image!) setValue(ciImage, forKey:kCIInputImageKey) 20 21 let resltImage = filter?.
setValue:strData forKey:@"inputMessage"]; [qrFilter setValue:@"H" forKey:@"inputCorrectionLevel"]; CIImage [colorFilter setValue:[CIColor colorWithRed:1 green:1 blue:1] forKey:@"inputColor1"]; CIImage *colorImage ]; // 4.设置滤镜inputMessage数据 [filter setValue:data forKey:@"inputMessage"]; // 5.获得滤镜输出的图像 CIImage *urlImage = [filter outputImage]; // 6.将CIImage 转换为UIImage UIImage *image = [UIImage imageWithCIImage
//或者直接转成image CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer); CIImage *ciImage = [CIImage imageWithCVImageBuffer:imageBuffer]; UIImage *image = [UIImage imageWithCIImage :ciImage]; dispatch_async(dispatch_get_main_queue(), ^{ _captrueImageView.image = image
createBlurBackground (image:UIImage,view:UIView,blurRadius:Float) { //处理原始NSData数据 let originImage = CIImage blurRadius), forKey: "inputRadius") //生成模糊图片 let context = CIContext(options: nil) let result:CIImage CIImage let blurImage = UIImage(CGImage: context.createCGImage(result, fromRect: result.extent())
我的转换流程是:CVPixelBuffer->CVPixelBuffer->CIImage->CIImage(resized)->CVPixelBuffer。 最后一步 CIImage 转 CVPixelBuffer 是通过 CIContext 渲染完成。 { let imageSide = 299 var ciImage = CIImage(cvPixelBuffer: pixelBuffer, options: nil) let transform = ciImage.applying(transform).cropping(to: CGRect(x: 0, y: 0, width: imageSide, height: imageSide)) Vision 支持的图片数据类型: CVPixelBufferRef CGImageRef CIImage NSURL NSData 这几乎涵盖了 iOS 中图片相关的 API,很实用很强大。
生成二维码 CIImage *image = [filter outputImage]; // 4. image withSize:80]; #pragma mark - 将模糊图片转换成高清图 - (UIImage *)createNonInterpolatedUIImageFormCIImage:(CIImage
简单来说,CIFilter接收一个或多个图像作为输入源,通过键值对设置和检索CIFilter对象的参数,生成一个CIImage对象作为输出源。 实现一个outputImage方法来创建一个具有过滤器效果的新CIImage。 CIFilter重要属性 /* 输出 */ @available(iOS 5.0, *) open var outputImage: CIImage? { //将UIImage转换成CIImage,处理前的图片 guard let input = CIImage(image:image) else { return nil setValue(input, forKey: kCIInputImageKey) //渲染并输出CIImage,处理后的图片 guard let output = filter
Vision 支持的图片类型 Vision 支持多种图片类型,如: CIImage NSURL NSData CGImageRef CVPixelBufferRef Vison 的使用 与结构图 Vision // 转换CIImage CIImage *convertImage = [[CIImage alloc]initWithImage:image]; // 创建处理requestHandler // 转换CIImage CIImage *convertImage = [[CIImage alloc]initWithImage:image]; // 创建处理requestHandler