Skip to content

Instantly share code, notes, and snippets.

@kitsuyui
Created February 4, 2015 12:47
Show Gist options
  • Save kitsuyui/4e8f4866d8fa57c23c09 to your computer and use it in GitHub Desktop.
Save kitsuyui/4e8f4866d8fa57c23c09 to your computer and use it in GitHub Desktop.
Swift で UIImage の方向を強制的に変換する ref: http://qiita.com/kitsuyui/items/c8d76acfa0ecd6570fdb
//
// UIImage+fixOrientation.swift
//
import UIKit
extension UIImage {
func fixOrientation () -> UIImage {
if self.imageOrientation == UIImageOrientation.Up {
return self
}
var transform = CGAffineTransformIdentity
typealias o = UIImageOrientation
let width = self.size.width
let height = self.size.height
switch (self.imageOrientation) {
case o.Down, o.DownMirrored:
transform = CGAffineTransformTranslate(transform, width, height)
case o.Left, o.LeftMirrored:
transform = CGAffineTransformTranslate(transform, width, 0)
transform = CGAffineTransformRotate(transform, CGFloat(M_PI_2))
case o.Right, o.RightMirrored:
transform = CGAffineTransformTranslate(transform, 0, height)
transform = CGAffineTransformRotate(transform, CGFloat(-M_PI_2))
default: // o.Up, o.UpMirrored:
break
}
switch (self.imageOrientation) {
case o.UpMirrored, o.DownMirrored:
transform = CGAffineTransformTranslate(transform, width, 0)
transform = CGAffineTransformScale(transform, -1, 1)
case o.LeftMirrored, o.RightMirrored:
transform = CGAffineTransformTranslate(transform, height, 0)
transform = CGAffineTransformScale(transform, -1, 1)
default: // o.Up, o.Down, o.Left, o.Right
break
}
let cgimage = self.CGImage
let ctx = CGBitmapContextCreate(nil, UInt(width), UInt(height),
CGImageGetBitsPerComponent(cgimage), 0,
CGImageGetColorSpace(cgimage),
CGImageGetBitmapInfo(cgimage))
switch (self.imageOrientation) {
case o.Left, o.LeftMirrored, o.Right, o.RightMirrored:
CGContextDrawImage(ctx, CGRectMake(0, 0, height, width), cgimage)
default:
CGContextDrawImage(ctx, CGRectMake(0, 0, width, height), cgimage)
}
let cgimg = CGBitmapContextCreateImage(ctx)
let img = UIImage(CGImage: cgimg)
return img!
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment