#1 UIImage,CGImage,CIImageそれぞれの違い
###1.1 UIImage
- UIKitフレームワークのクラス。
- 主に既存の画像を使った処理を行う。
- 長さや位置の指定は "point" 単位で行う
- 主にviewとのやりとりに使用する
###1.2 CGImage
- CoreGraphicsフレームワークのクラス。
- オリジナルの図形などを描画したいときに使用する。
- 長さや位置の指定は "pixel" 単位で行う
- 画像加工やピクセル単位の処理を行う場合はだいたいこいつを使う(IN/OUTがCGImageになる)。
###1.3 CIImage
- CoreImageフレームワークのクラス。
- 画像にフィルタ/エフェクトをかけるときに使用する。
参考記事 [1]
#2 各画像クラス変換コード
###2.1 UIImage -> CGImage
let cgImage = uiImage.CGImage
//UIImageからCGImageへの変換時に方向パラメータを喪失する。
//画像の向きがおかしくなるためUIImage.imageOrientationを保持しておかなければならない
//https://qiita.com/YutoMizutani/items/de6c0f2200bdbab10624
参考記事 [2]
###2.2 CGImage -> UIImage
let uiImage = UIImage(CGImage: cgImage)
参考記事 [2]
###2.3 UIImage -> CIImage
let ciImage = uiimage.CIImage
参考記事 [2]
###2.4 CIImage -> UIImage
let uiImage = UIImage(CIImage: cgImage)
参考記事 [2]
###2.5 CGImage -> CIImage
let ciImage = CIImage(CGImage: cgImage)
参考記事 [2]
###2.6 CIImage -> CGImage
let context = CIContext(options: nil)
let cgImage = context.createCGImage(ciImage, fromRect: ciImage.extent())
参考記事 [2]
#3 ローカルファイルに対する読み書き
未完成の項目です。
UIImage経由で読み書きを行なっているものが多かった気がしますが、???に入るコードをご存知の方はコメントして頂けると幸いです。
###3.1 UIImage->URL
let pngImageData = UIImagePNGRepresentation(image)
pngImageData!.write(to: URL(fileURLWithPath: path), options: .atomic)
参考記事 [3]
###3.2 URL->UIImage
let image = UIImage(contentsOfFile: path)
参考記事 [3]
###3.3 CGImage->URL
???
###3.4 URL->CGImage
???
###3.5 CIImage->URL
???
###3.6 URL->CIImage
let ciimage = CIImage(contentsOf: url)
#参考記事
[1] Qiita Swift画像処理の基礎知識 〜iOS標準の画像クラス・フレームワーク〜
[2] Qiita [UIImage] <-> [CGImage] <-> [CIImage] In Swift
[3] Qiita 【Swift4】URL先の画像をアプリ内に保存&ロードする