iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 9
1

https://ithelp.ithome.com.tw/upload/images/20171228/20107329dh5bRiNgbM.png
現在很難找到一個相機應用甚至圖片應用沒有濾鏡功能的,而其實 Core Image 也能玩濾鏡。

Image Filter

Image Filter

  • 在 App 的底部放一個可以橫向移動的 UICollectionView
  • Cell 內部會顯示一張通過濾鏡處理後的圖片。
  • 當我們選擇其中一個 Cell 的時候,將濾鏡的效果套用在上方的大圖上。

處理圖片的過程

  1. 複製一份 cgImage
  2. 通過 Filter 名稱建立一個 Filter
  3. 建立 context
  4. 在 context 上畫出過濾後的圖片
  5. 輸出過濾後的圖片
fileprivate func renderImage(image:UIImage, filterName:String) -> UIImage? {
    // 1 - copy cgImage from image
    let sourceImage = CIImage(cgImage: image.cgImage!)
    
    // 2 - init filter
    let filter = CIFilter(name: filterName)
    filter?.setDefaults()
    filter?.setValue(sourceImage, forKey: kCIInputImageKey)
    
    if filter == nil { return nil}
    
    // 3 - init context
    let context = CIContext(options: nil)
    
    // 4 - output filtered image
    let outputCGImage = context.createCGImage(filter!.outputImage!, from: filter!.outputImage!.extent)
    if  outputCGImage != nil {
        return UIImage(cgImage: outputCGImage!)
    } else {
        return nil
    }
}

查看可用的 Filter

還沒有看到文章介紹有什麼濾鏡可以用,不過我們可以把他們的名稱以及對應的參數印出來。

Filter Names

CIFilter.filterNames(inCategory: kCICategoryBuiltIn)

相關的參數也能通過 filter 獲得

let filter = CIFilter(name: filterName)
filter.inputKeys
filter.outputKeys
filter.attributes

有時候我們也會混合使用濾鏡,比如對一張照片同時用了棕褐色濾鏡 + 加光亮度濾鏡。


參考


上一篇
Flip Card - 翻轉圖片
下一篇
Merry Christmas - 下雪 ( CAEmitterLayer )
系列文
iOS Swift x Layout x Animation x Transition30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

1
吳晉榮
iT邦新手 5 級 ‧ 2017-12-29 09:05:03

請問,官方文件點進去後怎麼還是這篇呢?
難道~~~~你就是官方?

我貼錯了 = =...
感謝提醒,我這裡修改一下

我要留言

立即登入留言