图片旋转 iOS

来源:互联网 发布:网络优化培训费多少 编辑:程序博客网 时间:2024/04/24 06:02

首先我们封装一个类别,这样直接填入数据就可以了

代码如下:category

 .h文件中

#import <UIKit/UIKit.h>

@interface UIImage (ImageRotate)
-(UIImage *)imageRotateIndegree:(float)degree;
@end

.m文件中

#import "UIImage+ImageRotate.h"
#import <QuartzCore/QuartzCore.h>
#import <Accelerate/Accelerate.h>
@implementation UIImage (ImageRotate)
//image->Context->image
-(UIImage *)imageRotateIndegree:(float)degree
{
    size_t width = (size_t)(self.size.width*self.scale);
    size_t height = (size_t)(self.size.height*self.scale);
    size_t bytesPerRow = width * 4; //表明每行 图片数据字节
    //透明度
    CGImageAlphaInfo alphaInfo = kCGImageAlphaPremultipliedFirst; //alpha
    /*参数1:NULL
      参数2:宽度
      参数3:高度
      参数4:图片颜色深度
      参数5:字节数
      参数6:颜色空间
      参数7: 图片的排序方式
     */
    //配置上下文参数
    CGContextRef bmcontext = CGBitmapContextCreate(NULL, width, height, 8, bytesPerRow, CGColorSpaceCreateDeviceRGB(), kCGBitmapByteOrderDefault | alphaInfo);
    if (!bmcontext) {
        return nil;
    }
    /*参数1:上下文参数
      参数2:图片大小
      参数3:所要处理的图片
     */
    CGContextDrawImage(bmcontext, CGRectMake(0, 0, width, height), self.CGImage);
    //旋转
    UInt8 *data = (UInt8*)CGBitmapContextGetData(bmcontext);//获取数据
    /*参数1:数据
      参数2:高
      参数3:宽
      参数4:每行字节数
     */
    vImage_Buffer src = {data,height,width,bytesPerRow};
         //目标源
    vImage_Buffer dest = {data,height,width,bytesPerRow};
    
    Pixel_8888 bgColor = {0,0,0,0};
    //图片旋转语句
    /*
     参数1:旋转的图片
     参数2:旋转后的图片
     参数3:可以忽略
     参数4:旋转的角度
     参数5:背景颜色
     参数6: 填充颜色
     */
    vImageRotate_ARGB8888(&src, &dest, NULL, degree, bgColor, kvImageBackgroundColorFill);
    CGImageRef rotateImageref =  CGBitmapContextCreateImage(bmcontext);
    UIImage *rotateImage= [UIImage imageWithCGImage:rotateImageref scale:self.scale orientation:self.imageOrientation];
    return rotateImage;
}
@end
在ViewController中

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    [self rotate];
    
    
}

-(void)rotate{
    UIImage *image =[UIImage imageNamed:@"1"];
    UIImage *imageNew =[image imageRotateIndegree:45 * 0.01745]; //其中45是旋转的度数,要转化成弧度,这个数值是3.14/180得到
    UIImageWriteToSavedPhotosAlbum(imageNew, nil, nil, nil); // 将图片添加到相册中 不过别忘了添加 <key>NSPhotoLibraryUsageDescription</key> <string>App需要您的同意,才能访问相册</string> iOS 10如果访问必须添加否则闪退
}


0 0
原创粉丝点击