swift- 优化照片 滤镜

Core Image 能通过分析图片的各个属性,人脸的区域等进行自动优化图片。我们只需要调用 autoAdjustmentFiltersWithOptions 这个API方法获取各个自动增强滤镜来优化图片即可。不管是人物照片还是风景照均可增强效果。
(以前另外还有个叫 autoAdjustmentFilters的方法,现已废除。)

1,具体使用的滤镜如下:
(1) CIRedEyeCorrection:修复因相机的闪光灯导致的各种红眼
(2) CIFaceBalance:调整肤色
(3) CIVibrance:在不影响肤色的情况下,改善图像的饱和度
(4) CIToneCurve:改善图像的对比度
(5) CIHighlightShadowAdjust:改善阴影细节

2,autoAdjustmentFiltersWithOptions方法参数说明(字典类型):
(1) CIDetectorImageOrientation提供图像方向:使Core Image能更精确的定位到脸的位置,对CIRedEyeCorrection和CIFaceBalance滤镜很有用。
(2) kCIImageAutoAdjustEnhance设为false :只需要消除红眼,不要其他滤镜
(3) kCIImageAutoAdjustRedEye设为false :消除红眼不要,其他滤镜都要

3,效果图如下(右侧为优化后的):
swift- 优化照片 滤镜_第1张图片

swift- 优化照片 滤镜_第2张图片

swift- 优化照片 滤镜_第3张图片


4,代码如下(所有滤镜都使用):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import  UIKit
 
class  ViewController UIViewController {
     
     @IBOutlet  weak  var  imageView:  UIImageView !
     
     //图片原图
     lazy  var  originalImage:  UIImage  = {
         return  UIImage (named:  "IMG_0473.jpg" )
     }()!
     
     lazy  var  context:  CIContext  = {
         return  CIContext (options:  nil )
         }()
     
     override  func  viewDidLoad() {
         super .viewDidLoad()
     }
     
     override  func  didReceiveMemoryWarning() {
         super .didReceiveMemoryWarning()
     }
     
     //优化图片
     @IBAction  func  autoAdjustImage(sender:  AnyObject ) {
         var  inputImage =  CIImage (image: originalImage)
         let  options:[ String  AnyObject ] = [ CIDetectorImageOrientation :1]  //图片方向
         let  filters = inputImage!.autoAdjustmentFiltersWithOptions(options)
         //遍历所有滤镜,依次处理图像
         for  filter CIFilter  in  filters {
             filter .setValue(inputImage, forKey: kCIInputImageKey)
             inputImage =  filter .outputImage
         }
         let  cgImage = context.createCGImage(inputImage!, fromRect: inputImage!.extent)
         self .imageView.image =  UIImage ( CGImage : cgImage)
     }
     
     //还原图片
     @IBAction  func  resetImage(sender:  AnyObject ) {
          self .imageView.image = originalImage
     }
}

原文出自: www.hangge.com   转载请保留原文链接: http://www.hangge.com/blog/cache/detail_902.html

你可能感兴趣的:(iOS/Swift)