Iphone 旋转图像自定义度

Iphone 旋转图像自定义度,iphone,uiimage,rotation,Iphone,Uiimage,Rotation,我想以自定义角度旋转UIImage(不是UIImageView) 我跟着,但对我不起作用 有人能帮忙吗?谢谢 更新: 下面的代码完成了部分工作,但旋转后我丢失了部分图像: 我应该做什么改变才能把它做好?(顺便说一句,屏幕截图中的黄色是我的UIImageView背景) 你必须这样做 YourContainer.transform = CGAffineTransformMakeRotation( 270.0/180*M_PI ); 我想剩下的事情你可以想出来。这个方法会返回你旋转角度的图像 #p

我想以自定义角度旋转UIImage(不是UIImageView) 我跟着,但对我不起作用

有人能帮忙吗?谢谢

更新: 下面的代码完成了部分工作,但旋转后我丢失了部分图像:

我应该做什么改变才能把它做好?(顺便说一句,屏幕截图中的黄色是我的UIImageView背景)


你必须这样做

YourContainer.transform = CGAffineTransformMakeRotation( 270.0/180*M_PI );

我想剩下的事情你可以想出来。

这个方法会返回你旋转角度的图像

#pragma mark -
#pragma mark Rotate Image 

- (UIImage *)scaleAndRotateImage:(UIImage *)image  { 

    CGImageRef imgRef = image.CGImage;

    CGFloat width = CGImageGetWidth(imgRef);
    CGFloat height = CGImageGetHeight(imgRef);

    CGAffineTransform transform = CGAffineTransformIdentity;
    CGRect bounds = CGRectMake(0, 0, width, height);

    CGFloat boundHeight;

    boundHeight = bounds.size.height;  
    bounds.size.height = bounds.size.width; 
    bounds.size.width = boundHeight;
    transform = CGAffineTransformMakeScale(-1.0, 1.0);
    transform = CGAffineTransformRotate(transform, M_PI / 2.0); //use angle/360 *MPI

    UIGraphicsBeginImageContext(bounds.size);   
    CGContextRef context = UIGraphicsGetCurrentContext();   
    CGContextConcatCTM(context, transform); 
    CGContextDrawImage(context, CGRectMake(0, 0, width, height), imgRef);
    UIImage *imageCopy = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return imageCopy;   

}

此函数可旋转其中心的任何图像,但图像会变成正方形,因此我建议在此函数之后绘制图像时参考图像中心。

要实现此功能,您需要解决两个问题

  • 您正在围绕图像的下角而不是中心旋转
  • 现在旋转图像以使其适合,结果图像的边框需要更大
  • 若要解决围绕中心的旋转问题,请首先执行到中心的平移,然后旋转,然后向后平移

    CGAffineTransform transform = CGAffineTransformIdentity;
    transform = CGAffineTransformTranslate(transform, boundingRect.size.width/2, boundingRect.size.height/2);
    transform = CGAffineTransformRotate(transform, angle);
    transform = CGAffineTransformScale(transform, 1.0, -1.0);
    
    CGContextConcatCTM(context, transform);
    
    // Draw the image into the context
    CGContextDrawImage(context, CGRectMake(-imageView.image.size.width/2, -imageView.image.size.height/2, imageView.image.size.width, imageView.image.size.height), imageView.image.CGImage);
    
    // Get an image from the context
    rotatedImage = [UIImage imageWithCGImage: CGBitmapContextCreateImage(context)];
    
    要计算边界矩形的大小,您需要将新的旋转图像适配到以下位置:

    - (CGRect) getBoundingRectAfterRotation: (CGRect) rectangle byAngle: (CGFloat) angleOfRotation {
        // Calculate the width and height of the bounding rectangle using basic trig
        CGFloat newWidth = rectangle.size.width * fabs(cosf(angleOfRotation)) + rectangle.size.height * fabs(sinf(angleOfRotation));
        CGFloat newHeight = rectangle.size.height * fabs(cosf(angleOfRotation)) + rectangle.size.width * fabs(sinf(angleOfRotation));
    
        // Calculate the position of the origin
        CGFloat newX = rectangle.origin.x + ((rectangle.size.width - newWidth) / 2);
        CGFloat newY = rectangle.origin.y + ((rectangle.size.height - newHeight) / 2);
    
        // Return the rectangle
        return CGRectMake(newX, newY, newWidth, newHeight);
    }
    
    您可以在我以前的帖子和答案中找到这些技巧:

    在这里:

    希望这有帮助


    用于旋转图像的Dave

    。。您可以使用此iAction。。。每次点击按钮,图像都会旋转90度

    -(IBAction)rotateImageClick:(id)sender{
    
    UIImage *image2=[[UIImage alloc]init];
    image2 = [self imageRotatedByDegrees:self.roateImageView.image deg:(90)]; //Angle by 90 degree
    self.roateImageView.image = image2;
    imgData= UIImageJPEGRepresentation(image2,0.9f);
    
    }

    对于旋转图像,u只需通过以下方法的UIimage和旋转度

    - (UIImage *)imageRotatedByDegrees:(UIImage*)oldImage deg:(CGFloat)degrees
    
    //------------------------------------------------------------------------

    #pragma mark - imageRotatedByDegrees Method
    
    - (UIImage *)imageRotatedByDegrees:(UIImage*)oldImage deg:(CGFloat)degrees{
    
        // calculate the size of the rotated view's containing box for our drawing space
        UIView *rotatedViewBox = [[UIView alloc] initWithFrame:CGRectMake(0,0,oldImage.size.width, oldImage.size.height)];
    
        CGAffineTransform t = CGAffineTransformMakeRotation(degrees * M_PI / 180);
        rotatedViewBox.transform = t;
    
        CGSize rotatedSize = rotatedViewBox.frame.size;
        // Create the bitmap context
        UIGraphicsBeginImageContext(rotatedSize);
        CGContextRef bitmap = UIGraphicsGetCurrentContext();
    
        // Move the origin to the middle of the image so we will rotate and scale around the center.
        CGContextTranslateCTM(bitmap, rotatedSize.width/2, rotatedSize.height/2);
    
        //   // Rotate the image context
        CGContextRotateCTM(bitmap, (degrees * M_PI / 180));
    
        // Now, draw the rotated/scaled image into the context
        CGContextScaleCTM(bitmap, 1.0, -1.0);
        CGContextDrawImage(bitmap, CGRectMake(-oldImage.size.width / 2, -oldImage.size.height / 2, oldImage.size.width, oldImage.size.height), [oldImage CGImage]);
    
        UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return newImage;
    
    }
    
    我想这个链接会有帮助的。。。。。。。!通过单击目标C中的按钮旋转原始图像


    除了他想旋转图像本身,而不是包含图像的视图。这个代码将图像旋转90度,对吗?如果我只需要向左或向右旋转5度怎么办?太好了!imageCopy是否处于自动释放模式?图像旋转但倒置。图像旋转但翻转到Hi,此代码不适用于与UIImageOrientationUp方向不同的照片,您有任何解决方案吗?Hi如果我旋转30左右的角度,它将从左修剪图像。
    - (UIImage *)imageRotatedByDegrees:(UIImage*)oldImage deg:(CGFloat)degrees
    
    #pragma mark - imageRotatedByDegrees Method
    
    - (UIImage *)imageRotatedByDegrees:(UIImage*)oldImage deg:(CGFloat)degrees{
    
        // calculate the size of the rotated view's containing box for our drawing space
        UIView *rotatedViewBox = [[UIView alloc] initWithFrame:CGRectMake(0,0,oldImage.size.width, oldImage.size.height)];
    
        CGAffineTransform t = CGAffineTransformMakeRotation(degrees * M_PI / 180);
        rotatedViewBox.transform = t;
    
        CGSize rotatedSize = rotatedViewBox.frame.size;
        // Create the bitmap context
        UIGraphicsBeginImageContext(rotatedSize);
        CGContextRef bitmap = UIGraphicsGetCurrentContext();
    
        // Move the origin to the middle of the image so we will rotate and scale around the center.
        CGContextTranslateCTM(bitmap, rotatedSize.width/2, rotatedSize.height/2);
    
        //   // Rotate the image context
        CGContextRotateCTM(bitmap, (degrees * M_PI / 180));
    
        // Now, draw the rotated/scaled image into the context
        CGContextScaleCTM(bitmap, 1.0, -1.0);
        CGContextDrawImage(bitmap, CGRectMake(-oldImage.size.width / 2, -oldImage.size.height / 2, oldImage.size.width, oldImage.size.height), [oldImage CGImage]);
    
        UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return newImage;
    
    }