kitoko552.memo

kitoko552のメモ

CGImageからUIImageへの変換時に画像の向きが変わってしまう

要点

  • UIImage(CGImage:)ではなく、UIImage(CGImage:, scale:, orientation:)を使う。
// Preferred
let uiImage = UIImage(CGImage: cgImage, scale: originalImage.scale, orientation: originalImage.imageOrientation)
// Not preferred
let uiImage = UIImage(CGImage: cgImage)

CGImageは画像の向きの情報を持っていない

CGImageからUIImageに変換すると画像の向きがおかしくなることがあります。
これはCGImageが画像の向きの情報を持っていないからです。
したがって、CGImageからUIImageに変換するときに画像の向きを教えてあげなければなりません。

UIImageのイニシャライザを使う

幸いなことに、UIImageのイニシャライザにはUIImage(CGImage:)の他に、UIImage(CGImage:, scale:, orientation:)があります。
後者のorientation引数に、元画像のimageOrientationを与えてあげれば元画像と同じ方向になります。

// Preferred
let uiImage = UIImage(CGImage: cgImage, scale: originalImage.scale, orientation: originalImage.imageOrientation)
// Not preferred
let uiImage = UIImage(CGImage: cgImage)

// originalImageがUIImageの場合

おわり