Skip to content

Commit 98dbeda

Browse files
author
lincf0912
committed
-修复真机获取CGImage的尺寸是真实方向的尺寸。
1 parent 8ba73ae commit 98dbeda

1 file changed

Lines changed: 27 additions & 6 deletions

File tree

LFImagePickerController/LFImagePickerController/class/utils/Category/UIImage+LFCommon.m

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,17 @@ - (CGImageRef)lf_cgFixOrientation {
2828

2929
CGFloat width = CGImageGetWidth(self.CGImage);
3030
CGFloat height = CGImageGetHeight(self.CGImage);
31-
31+
32+
// CGImage gets the size in normal direction.
33+
CGSize size = [UIImage lf_exchangeSizeWithOrientation:editImg.imageOrientation size:CGSizeMake(width, height)];
3234
// We need to calculate the proper transformation to make the image upright.
3335
// We do it in 2 steps: Rotate if Left/Right/Down, and then flip if Mirrored.
34-
CGAffineTransform transform = [UIImage lf_exchangeOrientation:editImg.imageOrientation size:CGSizeMake(width, height)];
36+
CGAffineTransform transform = [UIImage lf_exchangeTransformWithOrientation:editImg.imageOrientation size:size];
3537

3638

3739
// Now we draw the underlying CGImage into a new context, applying the transform
3840
// calculated above.
39-
CGContextRef ctx = CGBitmapContextCreate(NULL, width, height,
41+
CGContextRef ctx = CGBitmapContextCreate(NULL, size.width, size.height,
4042
CGImageGetBitsPerComponent(editImg.CGImage), 0,
4143
CGImageGetColorSpace(editImg.CGImage),
4244
CGImageGetBitmapInfo(editImg.CGImage));
@@ -47,11 +49,11 @@ - (CGImageRef)lf_cgFixOrientation {
4749
case UIImageOrientationRight:
4850
case UIImageOrientationRightMirrored:
4951
// Grr...
50-
CGContextDrawImage(ctx, CGRectMake(0,0, height, width), editImg.CGImage);
52+
CGContextDrawImage(ctx, CGRectMake(0,0, size.height, size.width), editImg.CGImage);
5153
break;
5254

5355
default:
54-
CGContextDrawImage(ctx, CGRectMake(0,0, width, height), editImg.CGImage);
56+
CGContextDrawImage(ctx, CGRectMake(0,0, size.width, size.height), editImg.CGImage);
5557
break;
5658
}
5759

@@ -63,7 +65,26 @@ - (CGImageRef)lf_cgFixOrientation {
6365
return cgimg;
6466
}
6567

66-
+ (CGAffineTransform)lf_exchangeOrientation:(UIImageOrientation)imageOrientation size:(CGSize)size
68+
+ (CGSize)lf_exchangeSizeWithOrientation:(UIImageOrientation)imageOrientation size:(CGSize)size
69+
{
70+
CGSize exSize;
71+
switch (imageOrientation) {
72+
case UIImageOrientationLeft:
73+
case UIImageOrientationLeftMirrored:
74+
case UIImageOrientationRight:
75+
case UIImageOrientationRightMirrored:
76+
// Grr...
77+
exSize = CGSizeMake(size.height, size.width);
78+
break;
79+
80+
default:
81+
exSize = CGSizeMake(size.width, size.height);
82+
break;
83+
}
84+
return exSize;
85+
}
86+
87+
+ (CGAffineTransform)lf_exchangeTransformWithOrientation:(UIImageOrientation)imageOrientation size:(CGSize)size
6788
{
6889
CGAffineTransform transform = CGAffineTransformIdentity;
6990

0 commit comments

Comments
 (0)