解决图片上传到服务器旋转90度的问题(图片倒置)
2016-03-22 14:51
477 查看
#pragma mark
解决上传图旋转90度的方案
- (UIImage
*)fixOrientation:(UIImage
*)aImage {
// No-op if the orientation is already correct
if (aImage.imageOrientation
==
UIImageOrientationUp)
return aImage;
// We need to calculate the proper transformation to make the image upright.
// We do it in 2 steps: Rotate if Left/Right/Down, and then flip if Mirrored.
CGAffineTransform transform =
CGAffineTransformIdentity;
switch (aImage.imageOrientation) {
case
UIImageOrientationDown:
case
UIImageOrientationDownMirrored:
transform =
CGAffineTransformTranslate(transform, aImage.size.width,
aImage.size.height);
transform =
CGAffineTransformRotate(transform,
M_PI);
break;
case
UIImageOrientationLeft:
case
UIImageOrientationLeftMirrored:
transform =
CGAffineTransformTranslate(transform, aImage.size.width,
0);
transform =
CGAffineTransformRotate(transform,
M_PI_2);
break;
case
UIImageOrientationRight:
case
UIImageOrientationRightMirrored:
transform =
CGAffineTransformTranslate(transform,
0, aImage.size.height);
transform =
CGAffineTransformRotate(transform, -M_PI_2);
break;
default:
break;
}
switch (aImage.imageOrientation) {
case
UIImageOrientationUpMirrored:
case
UIImageOrientationDownMirrored:
transform =
CGAffineTransformTranslate(transform, aImage.size.width,
0);
transform =
CGAffineTransformScale(transform, -1,
1);
break;
case
UIImageOrientationLeftMirrored:
case
UIImageOrientationRightMirrored:
transform =
CGAffineTransformTranslate(transform, aImage.size.height,
0);
transform =
CGAffineTransformScale(transform, -1,
1);
break;
default:
break;
}
// Now we draw the underlying CGImage into a new context, applying the transform
// calculated above.
CGContextRef ctx =
CGBitmapContextCreate(NULL, aImage.size.width,
aImage.size.height,
CGImageGetBitsPerComponent(aImage.CGImage),
0,
CGImageGetColorSpace(aImage.CGImage),
CGImageGetBitmapInfo(aImage.CGImage));
CGContextConcatCTM(ctx, transform);
switch (aImage.imageOrientation) {
case
UIImageOrientationLeft:
case
UIImageOrientationLeftMirrored:
case
UIImageOrientationRight:
case
UIImageOrientationRightMirrored:
// Grr...
CGContextDrawImage(ctx,
CGRectMake(0,0,aImage.size.height,aImage.size.width),
aImage.CGImage);
break;
default:
CGContextDrawImage(ctx,
CGRectMake(0,0,aImage.size.width,aImage.size.height),
aImage.CGImage);
break;
}
// And now we just create a new UIImage from the drawing context
CGImageRef cgimg =
CGBitmapContextCreateImage(ctx);
UIImage *img = [UIImage
imageWithCGImage:cgimg];
CGContextRelease(ctx);
CGImageRelease(cgimg);
return img;
}
解决上传图旋转90度的方案
- (UIImage
*)fixOrientation:(UIImage
*)aImage {
// No-op if the orientation is already correct
if (aImage.imageOrientation
==
UIImageOrientationUp)
return aImage;
// We need to calculate the proper transformation to make the image upright.
// We do it in 2 steps: Rotate if Left/Right/Down, and then flip if Mirrored.
CGAffineTransform transform =
CGAffineTransformIdentity;
switch (aImage.imageOrientation) {
case
UIImageOrientationDown:
case
UIImageOrientationDownMirrored:
transform =
CGAffineTransformTranslate(transform, aImage.size.width,
aImage.size.height);
transform =
CGAffineTransformRotate(transform,
M_PI);
break;
case
UIImageOrientationLeft:
case
UIImageOrientationLeftMirrored:
transform =
CGAffineTransformTranslate(transform, aImage.size.width,
0);
transform =
CGAffineTransformRotate(transform,
M_PI_2);
break;
case
UIImageOrientationRight:
case
UIImageOrientationRightMirrored:
transform =
CGAffineTransformTranslate(transform,
0, aImage.size.height);
transform =
CGAffineTransformRotate(transform, -M_PI_2);
break;
default:
break;
}
switch (aImage.imageOrientation) {
case
UIImageOrientationUpMirrored:
case
UIImageOrientationDownMirrored:
transform =
CGAffineTransformTranslate(transform, aImage.size.width,
0);
transform =
CGAffineTransformScale(transform, -1,
1);
break;
case
UIImageOrientationLeftMirrored:
case
UIImageOrientationRightMirrored:
transform =
CGAffineTransformTranslate(transform, aImage.size.height,
0);
transform =
CGAffineTransformScale(transform, -1,
1);
break;
default:
break;
}
// Now we draw the underlying CGImage into a new context, applying the transform
// calculated above.
CGContextRef ctx =
CGBitmapContextCreate(NULL, aImage.size.width,
aImage.size.height,
CGImageGetBitsPerComponent(aImage.CGImage),
0,
CGImageGetColorSpace(aImage.CGImage),
CGImageGetBitmapInfo(aImage.CGImage));
CGContextConcatCTM(ctx, transform);
switch (aImage.imageOrientation) {
case
UIImageOrientationLeft:
case
UIImageOrientationLeftMirrored:
case
UIImageOrientationRight:
case
UIImageOrientationRightMirrored:
// Grr...
CGContextDrawImage(ctx,
CGRectMake(0,0,aImage.size.height,aImage.size.width),
aImage.CGImage);
break;
default:
CGContextDrawImage(ctx,
CGRectMake(0,0,aImage.size.width,aImage.size.height),
aImage.CGImage);
break;
}
// And now we just create a new UIImage from the drawing context
CGImageRef cgimg =
CGBitmapContextCreateImage(ctx);
UIImage *img = [UIImage
imageWithCGImage:cgimg];
CGContextRelease(ctx);
CGImageRelease(cgimg);
return img;
}
相关文章推荐
- 图片旋转、鼠标滚轮缩放、镜像、切换图片js代码
- PHP实现图片旋转效果实例代码
- 特漂亮的JS图片排列旋转效果代码
- 使图片旋转的3种解决方案
- javascript结合canvas实现图片旋转效果
- 纯JS实现旋转图片3D展示效果
- jQuery实现可以控制图片旋转角度效果(附demo源码下载)
- Android实现图片反转、翻转、旋转、放大和缩小
- JS实现图片平面旋转的方法
- 解决android有的手机拍照后上传图片被旋转的问题
- CGContext 总结二
- 关于android中调用系统拍照,返回图片是旋转90度..
- android有的手机拍照后上传图片被旋转的问题
- 图片常用处理
- 关于android中调用系统拍照,返回图片是旋转90度...
- UIImageView绕着一个点旋转
- 【Android 应用开发】AndroidUI设计 之 图片浏览器
- 图片旋转、无限滚动、文字跳动
- iPhone上关于相机拍照的图片的imageOrientation的问题
- android 图片Bitmap的旋转