Forked from schickling/UIImageFixedOrientationExtension.swift
Last active
September 12, 2018 12:52
-
-
Save ClaudeSutterlin/a6589d217a5562cb8c36f544326ac4d0 to your computer and use it in GitHub Desktop.
Revisions
-
ClaudeSutterlin revised this gist
Sep 28, 2016 . 1 changed file with 35 additions and 35 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,57 +1,57 @@ extension UIImage { func fixedOrientation() -> UIImage { if imageOrientation == .up { return self } var transform: CGAffineTransform = CGAffineTransform.identity switch imageOrientation { case .down, .downMirrored: transform = transform.translatedBy(x: size.width, y: size.height) transform = transform.rotated(by: CGFloat(M_PI)) break case .left, .leftMirrored: transform = transform.translatedBy(x: size.width, y: 0) transform = transform.rotated(by: CGFloat(M_PI_2)) break case .right, .rightMirrored: transform = transform.translatedBy(x: 0, y: size.height) transform = transform.rotated(by: CGFloat(-M_PI_2)) break case .up, .upMirrored: break } switch imageOrientation { case .upMirrored, .downMirrored: transform.translatedBy(x: size.width, y: 0) transform.scaledBy(x: -1, y: 1) break case .leftMirrored, .rightMirrored: transform.translatedBy(x: size.height, y: 0) transform.scaledBy(x: -1, y: 1) case .up, .down, .left, .right: break } 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 .left, .leftMirrored, .right, .rightMirrored: ctx.draw(self.cgImage!, in: CGRect(x: 0, y: 0, width: size.height, height: size.width)) break default: ctx.draw(self.cgImage!, in: CGRect(x: 0, y: 0, width: size.width, height: size.height)) break } let cgImage: CGImage = ctx.makeImage()! return UIImage(cgImage: cgImage) } } -
schickling revised this gist
Oct 12, 2015 . No changes.There are no files selected for viewing
-
schickling revised this gist
Oct 12, 2015 . 2 changed files with 57 additions and 54 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,54 +0,0 @@ This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal 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) } } -
schickling created this gist
Oct 12, 2015 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal 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) }