// // UIImage+ImageRotate.m // LenzSDK // // Created by lr on 2023/5/18. // #import "UIImage+ImageRotate.h" #import #import @implementation UIImage (ImageRotate) #pragma mark - 图片旋转 // 1 image --> Context 2. context 3. context --> image - (UIImage *)imageRotateWithIndegree:(CGFloat)indegree { // 1. image --> context size_t width = (size_t)(self.size.height * self.scale); size_t height = (size_t)(self.size.width * self.scale); size_t bytesPerRow = width * 4; // 每行图片字节数 CGImageAlphaInfo alphaInfo = kCGImageAlphaPremultipliedFirst; // alpha CGContextRef bmContext = CGBitmapContextCreate(NULL, width, height, 8, bytesPerRow, CGColorSpaceCreateDeviceRGB(), kCGBitmapByteOrderDefault | alphaInfo); if (!bmContext) { return nil; } CGContextDrawImage(bmContext, CGRectMake(0, 0, width, height), self.CGImage); // 2. 旋转 UInt8 * data = (UInt8 *)CGBitmapContextGetData(bmContext); // 需要引入 #import 解释这个类干什么用的 vImage_Buffer src = {data,height,width,bytesPerRow}; vImage_Buffer dest = {data,height,width,bytesPerRow}; Pixel_8888 bgColor = {0,0,0,0}; vImageRotate_ARGB8888(&src, &dest, NULL, indegree, bgColor, kvImageBackgroundColorFill); // 3. context --> UIImage CGImageRef rotateImageRef = CGBitmapContextCreateImage(bmContext); UIImage * rotateImage = [UIImage imageWithCGImage:rotateImageRef scale:self.scale orientation:self.imageOrientation]; CGContextRelease(bmContext); CGImageRelease(rotateImageRef); return rotateImage; } @end