2016-04-11 8 views
2

AlamofireImageを使用してCDNから画像をダウンロードしていますが、ダウンロードされた画像の一部にカスタムフィルター(グレースケール)を適用したいと思います。現在、私はすべての利用可能な画像を表示するためにscrollViewを使用しています。画像に特定の属性がある場合は、フィルタを適用してください。カスタムフィルターを適用するにはどうすればいいですか?

私はAlamofireImageを初めて使用しているので、カスタムフィルタの適用方法はわかりません。

私はので、私は、実際のフィルタ処理が機能している知っている誰かがダウンロードした画像にグレースケールを適用するには、カスタムフィルタを作成して助けてくださいすることができ、フィルタパラメータに

let imageFilter = BlurFilter(blurRadius: 10) 

を適用していますか?

答えて

4

アプローチ#1

使用Alamofireimageの "imageWithAppliedCoreImageFilter" UIImage拡張。

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 
) 

あなたの場合」:しかし、いくつかの理由のために、彼らは

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 
    } 
} 

使用法Alamofireimageユーザーに精通している必要があります...このフィルタオプションへの容易なプロトコルへのアクセスを提供し、それでは、1つを作成することはできません。 CIColorMonochromeフィルタと満足していない再(私はありませんでした)、ここではいくつかの他のオプションがある...

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

または

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

Apple開発サイトのcomplete list of available filtersへのリンクです。

アプローチ#2

What is the best Core Image filter to produce black and white effects?にトップクラスの答えとして、カスタムフィルタを検索します。

次に、内線番号を作成します。下のコードの本体には、ShmidtDerGoteというクレジットがあります。

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 
    } 
} 

とのstruct ...

public struct GrayScaleFilter: ImageFilter { 

    public init() { 
    } 

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

そして最後に、使い方...

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 
) 
関連する問題