67
51

More than 5 years have passed since last update.

画像クラスの違い(UIImage vs CGImage vs CIImage)

Last updated at Posted at 2018-10-06

1 UIImage,CGImage,CIImageそれぞれの違い

1.1 UIImage

  • UIKitフレームワークのクラス。
  • 主に既存の画像を使った処理を行う。
  • 長さや位置の指定は "point" 単位で行う
  • 主にviewとのやりとりに使用する

1.2 CGImage

  • CoreGraphicsフレームワークのクラス。
  • オリジナルの図形などを描画したいときに使用する。
  • 長さや位置の指定は "pixel" 単位で行う
  • 画像加工やピクセル単位の処理を行う場合はだいたいこいつを使う(IN/OUTがCGImageになる)。

qiita-square

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先の画像をアプリ内に保存&ロードする

67
51
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
67
51