处理图片的旋转问题bug
来源:互联网 发布:刘德华救歌迷知乎 编辑:程序博客网 时间:2024/05/24 04:45
UIImage有一个imageOrientation的属性,主要作用是控制image的绘制方向,共有以下8中方向
+ (UIImage *)imageWithCGImage:(CGImageRef)cgImage scale:(CGFloat)scale orientation:(UIImageOrientation)orientation NS_AVAILABLE_IOS(4_0);
该方面使用一个CGImageRef创建UIImage,在创建时还可以指定方法倍数以及旋转方向。当scale设置为1的时候,新创建的图像将和原图像尺寸一摸一样,而orientaion则可以指定新的图像的绘制方向。
下面是个解决应用图片旋转或颠倒的bug:
- + (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;
- }
0 0
- 处理图片的旋转问题bug
- 解决图片旋转的问题
- 图片压缩保存 处理三星拍照图片旋转问题的部分方法
- UIImage的imageOrientation属性 修改图片旋转了的bug
- Android:Camera的使用,并处理手机拍照后上传图片被旋转的问题
- 一些手机图片压缩处理后会出现旋转问题(三星)的解决方法
- vuejs开发组件分享之H5图片上传、压缩及拍照旋转的问题处理
- 图片旋转处理js
- 图片旋转处理
- android图片旋转处理
- IOS处理图片旋转
- android 图片旋转处理
- 处理相机拍照后Bitmap和图片旋转问题
- 七牛IOS和数码相机竖排,图片旋转问题处理
- java上传带旋转角度的图片旋转问题
- java处理图片--图片的缩放,旋转和马赛克化
- IOS应用开发-图片处理(拉伸图片 创建缩略图 解决图片旋转的问题 图片编码及上传 将图片写入磁盘)
- IOS应用开发-图片处理(拉伸图片 创建缩略图 解决图片旋转的问题 图片编码及上传 将图片写入磁盘)
- MapReduce 运行原理---再聊MapReduce 的 Map ,Reduce 以及shuffle 过程
- 0603 c语言函数
- CPU内部架构和工作原理
- Swagger UI教程 API 文档神器 搭配Node使用 web api 接口文档 mvc接口文档
- Xcode因为证书问题经常报的那些错
- 处理图片的旋转问题bug
- leetcode No3. Longest Substring Without Repeating Characters
- chinese restaurant process
- hdu 1238 substrings
- 湘潭oj_Rolling Variance1249(直接求)
- Defender 1.4.0.629解密研究
- web打印免费控件PAZU -- 四方在线WEB打印控件
- 欢迎使用CSDN-markdown编辑器
- Face2Face: Real-time Face Capture and Reenactment