2016-04-11 18 views
2

CDN'mden bir görüntü indirmek için AlamofireImage kullanıyorum ancak indirilen görüntülerin SOME'larına özel bir filtre (Gri Ölçek) uygulamak istiyorum. Şu anda tüm kullanılabilir görüntüleri göstermek için bir scrollView kullanıyorum ve bir görüntünün belirli bir özelliği varsa, filtreyi uygulayın.Özel Filtreyi nasıl uygularım?

AlamofireImage uygulamasında yeniyim, bu yüzden özel bir filtreyi nasıl uygulayacağımı bilmiyorum.

Ben gerçek filtre işlemi çalışıyor ama birisi indirilen görüntüye gri ölçek uygulamak için özel filtre oluşturma ile yardım lütfen biliyorum böylece filtre parametresine

let imageFilter = BlurFilter(blurRadius: 10) 

uyguladınız?

cevap

4

Yaklaşım # 1

Kullanım Alamofireimage yönettiği "imageWithAppliedCoreImageFilter" UIImage uzantısı.

let imageView = UIImageView(frame: frame) 
let URL = NSURL(string: "https://httpbin.org/image/png")! 
let placeholderImage = UIImage(named: "placeholder")! 
let color = CIColor(color: UIColor.grayColor()) // or whatever color desired 
let intensity = 1.0 // 1.0 is the default, but setting it manually here to allow adjustment 
let filter = CoreImageFilter(filterName: "CIColorMonochrome", parameters: ["inputColor": color, "inputIntensity" : intensity]) 

imageView.af_setImageWithURL(
    URL, 
    placeholderImage: placeholderImage, 
    filter: filter 
) 

Eğer': Ama nedense onlar

public struct CoreImageFilter: ImageFilter { 

    let filterName: String 
    let parameters: [String: AnyObject] 

    public init(filterName : String, parameters : [String : AnyObject]?) { 
     self.filterName = filterName 
     self.parameters = parameters ?? [:] 
    } 

    public var filter: UIImage -> UIImage { 
     return { image in 
      return image.af_imageWithAppliedCoreImageFilter(self.filterName, parameters: self.parameters) ?? image 
    } 
} 

Kullanımı Alamofireimage kullanıcıya aşina olmalıdır ... Bu filtre seçeneğine kolay protokol erişimi sağlamak, bu yüzden bir tane oluşturun izin vermeyin ...

let filter = CoreImageFilter(filterName: "CIPhotoEffectTonal", parameters: nil) 

veya

CIColorMonochrome filtresi (Ben değil), aşağıda başka seçenekleri vardır memnun değiliz
let filter = CoreImageFilter(filterName: "CIPhotoEffectNoir", parameters: nil) 

İşte Apple dev sitesinde complete list of available filters için bir bağlantı var.

Yaklaşım # 2

böyle What is the best Core Image filter to produce black and white effects? en beğenilen cevap olarak, özel bir filtre bulun.

Ardından bir uzantı oluşturun. Aşağıdaki kodun gövdesi için Shmidt ve DerGote kredileri.

extension UIImage { 
    public func ff_imageFilteredToGrayScale() -> UIImage? { 
     let context = CIContext(options: nil) 
     let ciImage = CoreImage.CIImage(image: self)! 

     // Set image color to b/w 
     let bwFilter = CIFilter(name: "CIColorControls")! 
     bwFilter.setValuesForKeysWithDictionary([kCIInputImageKey:ciImage, kCIInputBrightnessKey:NSNumber(float: 0.0), kCIInputContrastKey:NSNumber(float: 1.1), kCIInputSaturationKey:NSNumber(float: 0.0)]) 
     let bwFilterOutput = (bwFilter.outputImage)! 

     // Adjust exposure 
     let exposureFilter = CIFilter(name: "CIExposureAdjust")! 
     exposureFilter.setValuesForKeysWithDictionary([kCIInputImageKey:bwFilterOutput, kCIInputEVKey:NSNumber(float: 0.7)]) 
     let exposureFilterOutput = (exposureFilter.outputImage)! 

     // Create UIImage from context 
     let bwCGIImage = context.createCGImage(exposureFilterOutput, fromRect: ciImage.extent) 
     let resultImage = UIImage(CGImage: bwCGIImage, scale: 1.0, orientation: self.imageOrientation) 

     return resultImage 
    } 
} 

ve yapı

...

public struct GrayScaleFilter: ImageFilter { 

    public init() { 
    } 

    public var filter: UIImage -> UIImage { 
     return { image in 
      return image.ff_imageFilteredToGrayScale() ?? image 
     } 
    } 
} 

Ve nihayet, Kullanımı ...

let imageView = UIImageView(frame: frame) 
let URL = NSURL(string: "https://httpbin.org/image/png")! 
let placeholderImage = UIImage(named: "placeholder")! 

let filter = GrayScaleFilter() 

imageView.af_setImageWithURL(
    URL, 
    placeholderImage: placeholderImage, 
    filter: filter 
) 
İlgili konular