in iOS/WAStickersThirdParty/YYImageCoder.m [1009:1063]
CGImageRef YYCGImageCreateCopyWithOrientation(CGImageRef imageRef, UIImageOrientation orientation, CGBitmapInfo destBitmapInfo) {
if (!imageRef) return NULL;
if (orientation == UIImageOrientationUp) return (CGImageRef)CFRetain(imageRef);
size_t width = CGImageGetWidth(imageRef);
size_t height = CGImageGetHeight(imageRef);
CGAffineTransform transform = CGAffineTransformIdentity;
BOOL swapWidthAndHeight = NO;
switch (orientation) {
case UIImageOrientationDown: {
transform = CGAffineTransformMakeRotation(YYImageDegreesToRadians(180));
transform = CGAffineTransformTranslate(transform, -(CGFloat)width, -(CGFloat)height);
} break;
case UIImageOrientationLeft: {
transform = CGAffineTransformMakeRotation(YYImageDegreesToRadians(90));
transform = CGAffineTransformTranslate(transform, -(CGFloat)0, -(CGFloat)height);
swapWidthAndHeight = YES;
} break;
case UIImageOrientationRight: {
transform = CGAffineTransformMakeRotation(YYImageDegreesToRadians(-90));
transform = CGAffineTransformTranslate(transform, -(CGFloat)width, (CGFloat)0);
swapWidthAndHeight = YES;
} break;
case UIImageOrientationUpMirrored: {
transform = CGAffineTransformTranslate(transform, (CGFloat)width, 0);
transform = CGAffineTransformScale(transform, -1, 1);
} break;
case UIImageOrientationDownMirrored: {
transform = CGAffineTransformTranslate(transform, 0, (CGFloat)height);
transform = CGAffineTransformScale(transform, 1, -1);
} break;
case UIImageOrientationLeftMirrored: {
transform = CGAffineTransformMakeRotation(YYImageDegreesToRadians(-90));
transform = CGAffineTransformScale(transform, 1, -1);
transform = CGAffineTransformTranslate(transform, -(CGFloat)width, -(CGFloat)height);
swapWidthAndHeight = YES;
} break;
case UIImageOrientationRightMirrored: {
transform = CGAffineTransformMakeRotation(YYImageDegreesToRadians(90));
transform = CGAffineTransformScale(transform, 1, -1);
swapWidthAndHeight = YES;
} break;
default: break;
}
if (CGAffineTransformIsIdentity(transform)) return (CGImageRef)CFRetain(imageRef);
CGSize destSize = {width, height};
if (swapWidthAndHeight) {
destSize.width = height;
destSize.height = width;
}
return YYCGImageCreateAffineTransformCopy(imageRef, transform, destSize, destBitmapInfo);
}