iOS将image转90,180,270度的方法

来源:互联网 发布:怪医黑杰克 知乎 编辑:程序博客网 时间:2024/06/03 10:48

这里要分享的是将image旋转,而不是将imageView旋转,原理就是使用quartz2D来画图片,然后使用ctm变幻来实现旋转。
注:quartz2D的绘图左边和oc里面的绘图左边不一样,导致绘画出的图片是反转的。所以一上来得使它转正再进行进一步的旋转等

+ (UIImage *)image:(UIImage *)image rotation:(UIImageOrientation)orientation{    long double rotate = 0.0;    CGRect rect;    float translateX = 0;    float translateY = 0;    float scaleX = 1.0;    float scaleY = 1.0;    switch (orientation) {        case UIImageOrientationLeft:            rotate = M_PI_2;            rect = CGRectMake(0, 0, image.size.height, image.size.width);            translateX = 0;            translateY = -rect.size.width;            scaleY = rect.size.width/rect.size.height;            scaleX = rect.size.height/rect.size.width;            break;        case UIImageOrientationRight:            rotate = 3 * M_PI_2;            rect = CGRectMake(0, 0, image.size.height, image.size.width);            translateX = -rect.size.height;            translateY = 0;            scaleY = rect.size.width/rect.size.height;            scaleX = rect.size.height/rect.size.width;            break;        case UIImageOrientationDown:            rotate = M_PI;            rect = CGRectMake(0, 0, image.size.width, image.size.height);            translateX = -rect.size.width;            translateY = -rect.size.height;            break;        default:            rotate = 0.0;            rect = CGRectMake(0, 0, image.size.width, image.size.height);            translateX = 0;            translateY = 0;            break;    }    UIGraphicsBeginImageContext(rect.size);    CGContextRef context = UIGraphicsGetCurrentContext();    //做CTM变换    CGContextTranslateCTM(context, 0.0, rect.size.height);    CGContextScaleCTM(context, 1.0, -1.0);    CGContextRotateCTM(context, rotate);    CGContextTranslateCTM(context, translateX, translateY);    CGContextScaleCTM(context, scaleX, scaleY);    //绘制图片    CGContextDrawImage(context, CGRectMake(0, 0, rect.size.width, rect.size.height), image.CGImage);    UIImage *newPic = UIGraphicsGetImageFromCurrentImageContext();    return newPic;}
0 0
原创粉丝点击