Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save ClaudeSutterlin/a6589d217a5562cb8c36f544326ac4d0 to your computer and use it in GitHub Desktop.

Select an option

Save ClaudeSutterlin/a6589d217a5562cb8c36f544326ac4d0 to your computer and use it in GitHub Desktop.

Revisions

  1. ClaudeSutterlin revised this gist Sep 28, 2016. 1 changed file with 35 additions and 35 deletions.
    70 changes: 35 additions & 35 deletions UIImageFixedOrientationExtension.swift
    Original file line number Diff line number Diff line change
    @@ -1,57 +1,57 @@
    extension UIImage {

    func fixedOrientation() -> UIImage {
    if imageOrientation == UIImageOrientation.Up {

    if imageOrientation == .up {
    return self
    }
    var transform: CGAffineTransform = CGAffineTransformIdentity

    var transform: CGAffineTransform = CGAffineTransform.identity

    switch imageOrientation {
    case UIImageOrientation.Down, UIImageOrientation.DownMirrored:
    transform = CGAffineTransformTranslate(transform, size.width, size.height)
    transform = CGAffineTransformRotate(transform, CGFloat(M_PI))
    case .down, .downMirrored:
    transform = transform.translatedBy(x: size.width, y: size.height)
    transform = transform.rotated(by: CGFloat(M_PI))
    break
    case UIImageOrientation.Left, UIImageOrientation.LeftMirrored:
    transform = CGAffineTransformTranslate(transform, size.width, 0)
    transform = CGAffineTransformRotate(transform, CGFloat(M_PI_2))
    case .left, .leftMirrored:
    transform = transform.translatedBy(x: size.width, y: 0)
    transform = transform.rotated(by: CGFloat(M_PI_2))
    break
    case UIImageOrientation.Right, UIImageOrientation.RightMirrored:
    transform = CGAffineTransformTranslate(transform, 0, size.height)
    transform = CGAffineTransformRotate(transform, CGFloat(-M_PI_2))
    case .right, .rightMirrored:
    transform = transform.translatedBy(x: 0, y: size.height)
    transform = transform.rotated(by: CGFloat(-M_PI_2))
    break
    case UIImageOrientation.Up, UIImageOrientation.UpMirrored:
    case .up, .upMirrored:
    break
    }

    switch imageOrientation {
    case UIImageOrientation.UpMirrored, UIImageOrientation.DownMirrored:
    CGAffineTransformTranslate(transform, size.width, 0)
    CGAffineTransformScale(transform, -1, 1)
    case .upMirrored, .downMirrored:
    transform.translatedBy(x: size.width, y: 0)
    transform.scaledBy(x: -1, y: 1)
    break
    case UIImageOrientation.LeftMirrored, UIImageOrientation.RightMirrored:
    CGAffineTransformTranslate(transform, size.height, 0)
    CGAffineTransformScale(transform, -1, 1)
    case UIImageOrientation.Up, UIImageOrientation.Down, UIImageOrientation.Left, UIImageOrientation.Right:
    case .leftMirrored, .rightMirrored:
    transform.translatedBy(x: size.height, y: 0)
    transform.scaledBy(x: -1, y: 1)
    case .up, .down, .left, .right:
    break
    }
    let ctx: CGContextRef = CGBitmapContextCreate(nil, Int(size.width), Int(size.height), CGImageGetBitsPerComponent(CGImage), 0, CGImageGetColorSpace(CGImage), CGImageAlphaInfo.PremultipliedLast.rawValue)!
    CGContextConcatCTM(ctx, transform)

    let ctx: CGContext = CGContext(data: nil, width: Int(size.width), height: Int(size.height), bitsPerComponent: self.cgImage!.bitsPerComponent, bytesPerRow: 0, space: (self.cgImage?.colorSpace)!, bitmapInfo: CGImageAlphaInfo.premultipliedLast.rawValue)!

    ctx.concatenate(transform)

    switch imageOrientation {
    case UIImageOrientation.Left, UIImageOrientation.LeftMirrored, UIImageOrientation.Right, UIImageOrientation.RightMirrored:
    CGContextDrawImage(ctx, CGRectMake(0, 0, size.height, size.width), CGImage)
    case .left, .leftMirrored, .right, .rightMirrored:
    ctx.draw(self.cgImage!, in: CGRect(x: 0, y: 0, width: size.height, height: size.width))
    break
    default:
    CGContextDrawImage(ctx, CGRectMake(0, 0, size.width, size.height), CGImage)
    ctx.draw(self.cgImage!, in: CGRect(x: 0, y: 0, width: size.width, height: size.height))
    break
    }
    let cgImage: CGImageRef = CGBitmapContextCreateImage(ctx)!
    return UIImage(CGImage: cgImage)

    let cgImage: CGImage = ctx.makeImage()!

    return UIImage(cgImage: cgImage)
    }
    }
  2. @schickling schickling revised this gist Oct 12, 2015. No changes.
  3. @schickling schickling revised this gist Oct 12, 2015. 2 changed files with 57 additions and 54 deletions.
    54 changes: 0 additions & 54 deletions UIImageFixOrientation.swift
    Original file line number Diff line number Diff line change
    @@ -1,54 +0,0 @@
    func fixImageOrientation(src: UIImage) -> UIImage {

    if src.imageOrientation == UIImageOrientation.Up {
    return src
    }

    var transform: CGAffineTransform = CGAffineTransformIdentity

    switch src.imageOrientation {
    case UIImageOrientation.Down, UIImageOrientation.DownMirrored:
    transform = CGAffineTransformTranslate(transform, src.size.width, src.size.height)
    transform = CGAffineTransformRotate(transform, CGFloat(M_PI))
    break
    case UIImageOrientation.Left, UIImageOrientation.LeftMirrored:
    transform = CGAffineTransformTranslate(transform, src.size.width, 0)
    transform = CGAffineTransformRotate(transform, CGFloat(M_PI_2))
    break
    case UIImageOrientation.Right, UIImageOrientation.RightMirrored:
    transform = CGAffineTransformTranslate(transform, 0, src.size.height)
    transform = CGAffineTransformRotate(transform, CGFloat(-M_PI_2))
    break
    case UIImageOrientation.Up, UIImageOrientation.UpMirrored:
    break
    }

    switch src.imageOrientation {
    case UIImageOrientation.UpMirrored, UIImageOrientation.DownMirrored:
    CGAffineTransformTranslate(transform, src.size.width, 0)
    CGAffineTransformScale(transform, -1, 1)
    break
    case UIImageOrientation.LeftMirrored, UIImageOrientation.RightMirrored:
    CGAffineTransformTranslate(transform, src.size.height, 0)
    CGAffineTransformScale(transform, -1, 1)
    case UIImageOrientation.Up, UIImageOrientation.Down, UIImageOrientation.Left, UIImageOrientation.Right:
    break
    }

    let ctx: CGContextRef = CGBitmapContextCreate(nil, Int(src.size.width), Int(src.size.height), CGImageGetBitsPerComponent(src.CGImage), 0, CGImageGetColorSpace(src.CGImage), CGImageAlphaInfo.PremultipliedLast.rawValue)!

    CGContextConcatCTM(ctx, transform)

    switch src.imageOrientation {
    case UIImageOrientation.Left, UIImageOrientation.LeftMirrored, UIImageOrientation.Right, UIImageOrientation.RightMirrored:
    CGContextDrawImage(ctx, CGRectMake(0, 0, src.size.height, src.size.width), src.CGImage)
    break
    default:
    CGContextDrawImage(ctx, CGRectMake(0, 0, src.size.width, src.size.height), src.CGImage)
    break
    }

    let cgImgae: CGImageRef = CGBitmapContextCreateImage(ctx)!

    return UIImage(CGImage: cgImage)
    }
    57 changes: 57 additions & 0 deletions UIImageFixedOrientationExtension.swift
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,57 @@
    extension UIImage {

    func fixedOrientation() -> UIImage {

    if imageOrientation == UIImageOrientation.Up {
    return self
    }

    var transform: CGAffineTransform = CGAffineTransformIdentity

    switch imageOrientation {
    case UIImageOrientation.Down, UIImageOrientation.DownMirrored:
    transform = CGAffineTransformTranslate(transform, size.width, size.height)
    transform = CGAffineTransformRotate(transform, CGFloat(M_PI))
    break
    case UIImageOrientation.Left, UIImageOrientation.LeftMirrored:
    transform = CGAffineTransformTranslate(transform, size.width, 0)
    transform = CGAffineTransformRotate(transform, CGFloat(M_PI_2))
    break
    case UIImageOrientation.Right, UIImageOrientation.RightMirrored:
    transform = CGAffineTransformTranslate(transform, 0, size.height)
    transform = CGAffineTransformRotate(transform, CGFloat(-M_PI_2))
    break
    case UIImageOrientation.Up, UIImageOrientation.UpMirrored:
    break
    }

    switch imageOrientation {
    case UIImageOrientation.UpMirrored, UIImageOrientation.DownMirrored:
    CGAffineTransformTranslate(transform, size.width, 0)
    CGAffineTransformScale(transform, -1, 1)
    break
    case UIImageOrientation.LeftMirrored, UIImageOrientation.RightMirrored:
    CGAffineTransformTranslate(transform, size.height, 0)
    CGAffineTransformScale(transform, -1, 1)
    case UIImageOrientation.Up, UIImageOrientation.Down, UIImageOrientation.Left, UIImageOrientation.Right:
    break
    }

    let ctx: CGContextRef = CGBitmapContextCreate(nil, Int(size.width), Int(size.height), CGImageGetBitsPerComponent(CGImage), 0, CGImageGetColorSpace(CGImage), CGImageAlphaInfo.PremultipliedLast.rawValue)!

    CGContextConcatCTM(ctx, transform)

    switch imageOrientation {
    case UIImageOrientation.Left, UIImageOrientation.LeftMirrored, UIImageOrientation.Right, UIImageOrientation.RightMirrored:
    CGContextDrawImage(ctx, CGRectMake(0, 0, size.height, size.width), CGImage)
    break
    default:
    CGContextDrawImage(ctx, CGRectMake(0, 0, size.width, size.height), CGImage)
    break
    }

    let cgImage: CGImageRef = CGBitmapContextCreateImage(ctx)!

    return UIImage(CGImage: cgImage)
    }
    }
  4. @schickling schickling created this gist Oct 12, 2015.
    54 changes: 54 additions & 0 deletions UIImageFixOrientation.swift
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,54 @@
    func fixImageOrientation(src: UIImage) -> UIImage {

    if src.imageOrientation == UIImageOrientation.Up {
    return src
    }

    var transform: CGAffineTransform = CGAffineTransformIdentity

    switch src.imageOrientation {
    case UIImageOrientation.Down, UIImageOrientation.DownMirrored:
    transform = CGAffineTransformTranslate(transform, src.size.width, src.size.height)
    transform = CGAffineTransformRotate(transform, CGFloat(M_PI))
    break
    case UIImageOrientation.Left, UIImageOrientation.LeftMirrored:
    transform = CGAffineTransformTranslate(transform, src.size.width, 0)
    transform = CGAffineTransformRotate(transform, CGFloat(M_PI_2))
    break
    case UIImageOrientation.Right, UIImageOrientation.RightMirrored:
    transform = CGAffineTransformTranslate(transform, 0, src.size.height)
    transform = CGAffineTransformRotate(transform, CGFloat(-M_PI_2))
    break
    case UIImageOrientation.Up, UIImageOrientation.UpMirrored:
    break
    }

    switch src.imageOrientation {
    case UIImageOrientation.UpMirrored, UIImageOrientation.DownMirrored:
    CGAffineTransformTranslate(transform, src.size.width, 0)
    CGAffineTransformScale(transform, -1, 1)
    break
    case UIImageOrientation.LeftMirrored, UIImageOrientation.RightMirrored:
    CGAffineTransformTranslate(transform, src.size.height, 0)
    CGAffineTransformScale(transform, -1, 1)
    case UIImageOrientation.Up, UIImageOrientation.Down, UIImageOrientation.Left, UIImageOrientation.Right:
    break
    }

    let ctx: CGContextRef = CGBitmapContextCreate(nil, Int(src.size.width), Int(src.size.height), CGImageGetBitsPerComponent(src.CGImage), 0, CGImageGetColorSpace(src.CGImage), CGImageAlphaInfo.PremultipliedLast.rawValue)!

    CGContextConcatCTM(ctx, transform)

    switch src.imageOrientation {
    case UIImageOrientation.Left, UIImageOrientation.LeftMirrored, UIImageOrientation.Right, UIImageOrientation.RightMirrored:
    CGContextDrawImage(ctx, CGRectMake(0, 0, src.size.height, src.size.width), src.CGImage)
    break
    default:
    CGContextDrawImage(ctx, CGRectMake(0, 0, src.size.width, src.size.height), src.CGImage)
    break
    }

    let cgImgae: CGImageRef = CGBitmapContextCreateImage(ctx)!

    return UIImage(CGImage: cgImage)
    }