如何在iOS中从旋转、缩放和反转的UIImageView中提取UIImage



我正在从Gallery中获取图像,并使用CGAffineTransform应用缩放、旋转和反转变换。最后,我将图像保存到Gallery。但是保存的图像有白色矩形边界![带白色背景的旋转UIImageView][1]。

- (UIImage *)getTheTransformedOriginalImage:(UIImage *)aTransImage
  {
    CGAffineTransform transform = selImageView.transform;
   CGPathRef rotatedImageRectPath = CGPathCreateWithRect(selImageView.frame, &transform);
    CGRect boundingBox = CGPathGetBoundingBox(rotatedImageRectPath);
   CGSize rotatedSize = boundingBox.size;
   UIGraphicsBeginImageContext(rotatedSize);
   UIGraphicsBeginImageContextWithOptions(rotatedSize, NO, 0.0f);
// Move the origin to the middle of the image so we will rotate and scale around the center.
  CGContextTranslateCTM(UIGraphicsGetCurrentContext(), rotatedSize.width/2,    rotatedSize.height/2);
//Rotate the image context using tranform
   CGContextConcatCTM(UIGraphicsGetCurrentContext(), selImageView.transform);
// Now, draw the rotated/scaled image into the context
   CGContextScaleCTM(UIGraphicsGetCurrentContext(), 1.0, -1.0);
   CGContextDrawImage(UIGraphicsGetCurrentContext(), CGRectMake(-aTransImage.size.width / 2, -aTransImage.size.height / 2, aTransImage.size.width, aTransImage.size.height), [aTransImage CGImage]);
  UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
  UIGraphicsEndImageContext();
  return newImage;
}
- (IBAction)saveToGalleryClicked:(id)sender
  {
      UIImage *aTransImage = selImageView.image;
      UIImage *shareImage = [self getTheTransformedOriginalImage:aTransImage]
      UIImageWriteToSavedPhotosAlbum(shareImage, nil, nil, nil);
   }

我已经在附件中添加了旋转的UIImage。

为了不具有白色背景(即不透明图像),您需要使用不同的函数来开始图像上下文:

 UIGraphicsBeginImageContextWithOptions(CGSize size, **BOOL opaque**, CGFloat scale) 

因此,替换:

 UIGraphicsBeginImageContext(rotatedSize);

带有:

 UIGraphicsBeginImageContextWithOptions(rotatedSize, NO, [[UIScreen mainScreen]scale])

这将确保上下文的绘制具有透明度。