博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
图像编辑或选取照片后的方向旋转
阅读量:5144 次
发布时间:2019-06-13

本文共 3977 字,大约阅读时间需要 13 分钟。

问题描述:选取相册图片或使用摄像头拍摄图片后,得到的图像旋转90度

解决方法:在获取图片,使用之前,调整图像的方向属性

结果:正常运行

相关函数:

CGAffineTransformTranslate(transform, x, y):改变位置,
CGAffineTransformMakeTranslation(width, 0.0);改变位置,
CGAffineTransformRotate(transform, M_PI);旋转。
CGAffineTransformMakeRotation(-M_PI);旋转的
transform = CGAffineTransformScale(transform, -1.0, 1.0);是缩放的。
?view.transform = CGAffineTransformIdentity;当改变过一个view.transform属性或者view.layer.transform的时候需要恢复默认状态的话,记得先把他们重置可以使用
view.transform = CGAffineTransformIdentity,
或者view.layer.transform = CATransform3DIdentity,

 

 

 

 

------------------------------------------------------------------------------------------------------------------------------------------------

扩展UIImage类,增加新方法fixOrientation以使图像回归正确的方向属性

UIImage+fixOrientation.h

#import 
@interface UIImage (fixOrientation)- (UIImage *)fixOrientation;@end

 

 UIImage+fixOrientation.m

 

#import "UIImage+fixOrientation.h" @implementation UIImage (fixOrientation)- (UIImage *)fixOrientation {        // 如果图像已经是正确方向则不做操作    if (self.imageOrientation == UIImageOrientationUp) return self;        // 否则执行对应的操作以调整方向    // 1,旋转 2,翻转    CGAffineTransform transform = CGAffineTransformIdentity;        switch (self.imageOrientation) {        case UIImageOrientationDown://方向向下        case UIImageOrientationDownMirrored://方向下并且被翻转            transform = CGAffineTransformTranslate(transform, self.size.width, self.size.height);//移动至右下角            transform = CGAffineTransformRotate(transform, M_PI);//以右下角为圆点旋转180度            break;//更改结果,方向朝上                    case UIImageOrientationLeft://方向向左        case UIImageOrientationLeftMirrored://方向向左并且翻转            transform = CGAffineTransformTranslate(transform, self.size.width, 0);//右移width            transform = CGAffineTransformRotate(transform, M_PI_2);//逆时针旋转90度            break;                    caseUIImageOrientationRight://方向向右        caseUIImageOrientationRightMirrored://方向向右并且翻转            transform = CGAffineTransformTranslate(transform, 0, self.size.height);//下移            transform = CGAffineTransformRotate(transform, -M_PI_2);//顺时针旋转-90度            break;    }        switch (self.imageOrientation) {        case UIImageOrientationUpMirrored://向上镜像        case UIImageOrientationDownMirrored://向下镜像            transform = CGAffineTransformTranslate(transform, self.size.width, 0);            transform = CGAffineTransformScale(transform, -1, 1);//纵向翻转            break;                    case UIImageOrientationLeftMirrored://向左镜像        case UIImageOrientationRightMirrored:向右镜像            transform = CGAffineTransformTranslate(transform, self.size.height, 0);            transform = CGAffineTransformScale(transform, -1, 1);//横向翻转            break;    }        // Now we draw the underlying CGImage into a new context, applying the transform    // calculated above.    CGContextRef ctx = CGBitmapContextCreate(NULL, self.size.width, self.size.height,                                             CGImageGetBitsPerComponent(self.CGImage), 0,                                             CGImageGetColorSpace(self.CGImage),                                             CGImageGetBitmapInfo(self.CGImage));    CGContextConcatCTM(ctx, transform);    switch (self.imageOrientation) {        case UIImageOrientationLeft:        case UIImageOrientationLeftMirrored:        case UIImageOrientationRight:        case UIImageOrientationRightMirrored:            // Grr...            CGContextDrawImage(ctx, CGRectMake(0,0,self.size.height,self.size.width), self.CGImage);            break;                    default:            CGContextDrawImage(ctx, CGRectMake(0,0,self.size.width,self.size.height), self.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;}

 

 

 

 

转载于:https://www.cnblogs.com/hushuai-ios/p/3669059.html

你可能感兴趣的文章
自用正则表达式记录
查看>>
性能优化的 ULBOX(收集-)
查看>>
利用C#开发基于snmpsharpnet基础的SNMP开发应用
查看>>
data.table
查看>>
循序渐进之Spring AOP(2) - 基本概念
查看>>
C#的Lazy与LazyInitializer
查看>>
mysql设置远程访问之后 远程访问非常缓慢 解决办法!
查看>>
NYOJ 212 K尾相等数
查看>>
transform属性
查看>>
BZOJ 3203 凸包+三分
查看>>
列表 -- 增删改查(切片)
查看>>
【模板】堆排序
查看>>
DNS练习之正向解析
查看>>
[Leetcode][JAVA] LRU Cache
查看>>
硬件UDP读数AsynUdpClient
查看>>
本周内容
查看>>
sublime dockerfile 语法高亮
查看>>
InputStream、InputStreamReader和Reader的关系
查看>>
js兼容公用方法
查看>>
如何将应用完美迁移至Android P版本
查看>>