2019/01/21更新

[Swift] UIImageからCGImageを作成すると、画像が90度など回転してしまう件への対策

このエントリーをはてなブックマークに追加      

こんにちは、@yoheiMuneです。
今日は、Swiftで画像加工をする際に、なぜか回転してしまう問題の対応方法を、ブログに書きたいと思います。



目次




何が問題か

UIImageを加工しようと思い、CGImageやCIImageを作成して加工処理を行い、その後にUIImageを生成すると、画像が回転してしまう問題がありました。
調べてみると、UIImage -> CGImage -> UIImageと変換していく過程で、向きのパラメータが失われたことが原因のようでした。
// 加工元の画像
let uiImage = UIImage(named: "sample.png")

// CGImageに変換
let cgImage = uiImage.cgImage

// 色々と加工処理...

// CGImage から UIImage に変換.
let uiImage2 = UIImage(cgImage: cgImage, scale: 0, orientation: nil)
ここで問題として、CGImageからUIImageを作成する際に、orientationを明示的に指定する必要があり、この指定がないと、画像が90度など回転してしまいます。



オリジナル画像の方向パラメータを使って対処する

どうすれば良いかというと、元画像の方向(orientation)を使うことで対処ができます。
// 「orientation」に、元画像の向きを指定する.
let uiImage2 = UIImage(cgImage: cgImage, scale: 0, orientation: uiImage.imageOrientation)
ここではorientation: uiImage.imageOrientationで、元画像の向きを指定します。



最後に

最初に画像が回転してしまった時には、どうしたら良いのかも検討がつかずでした。実装しているコードを1つずつ丁寧に理解すれば(今回の場合はorientationパラメータを理解すれば)、対応できる内容でした。

最後になりますが本ブログでは、Swift、PHP、フロントエンド、Python、サーバー、インフラ、Node.js、Java、Linux、機械学習、などの技術トピックを発信をしていきます。「プログラミングで困ったその時の、解決の糸口に!」そんな目標でブログを書き続けています。ぜひ、本ブログのRSSTwitterをフォローして貰えたら嬉しいです ^ ^

最後までご覧頂きましてありがとうございました!





こんな記事もいかがですか?

RSS画像

もしご興味をお持ち頂けましたら、ぜひRSSへの登録をお願い致します。