iOS应用开发中对UIImage进行截取和缩放的方法详解

2020-01-15 14:16:14丽君

  • 缩放到指定大小,也就是指定的size.
  • 等比缩放。

    1.缩放到指定大小

    
    - (UIImage*)imageCompressWithSimple:(UIImage*)image scaledToSize:(CGSize)size
    {
      UIGraphicsBeginImageContext(size);
      [image drawInRect:CGRectMake(0,0,size.width,size.height)];
      UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
      UIGraphicsEndImageContext();
      return newImage;
    }
    

    2.等比缩放

    (1)通过缩放系数:

    
    - (UIImage*)imageCompressWithSimple:(UIImage*)image scale:(float)scale
    {
      CGSize size = image.size;
      CGFloat width = size.width;
      CGFloat height = size.height;
      CGFloat scaledWidth = width * scale;
      CGFloat scaledHeight = height * scale;
      UIGraphicsBeginImageContext(size); // this will crop
      [image drawInRect:CGRectMake(0,0,scaledWidth,scaledHeight)];
      UIImage* newImage= UIGraphicsGetImageFromCurrentImageContext();
      UIGraphicsEndImageContext();
      return newImage;
    }
    

    scale是缩放系数 。

    (2)通过计算得到缩放系数

    
    - (UIImage*)imageByScalingAndCroppingForSize:(CGSize)targetSize
    {
    
      UIImage *sourceImage = [UIImage imageNamed:@"test.jpg"];
      UIImage *newImage = nil;
      CGSize imageSize = sourceImage.size;
      CGFloat width = imageSize.width;
      CGFloat height = imageSize.height;
      CGFloat targetWidth = targetSize.width;
      CGFloat targetHeight = targetSize.height;
      CGFloat scaleFactor = 0.0;
      CGFloat scaledWidth = targetWidth;
      CGFloat scaledHeight = targetHeight;
      CGPoint thumbnailPoint = CGPointMake(0.0,0.0);
    
      if (CGSizeEqualToSize(imageSize, targetSize) == NO)
      {
        CGFloat widthFactor = targetWidth / width;
        CGFloat heightFactor = targetHeight / height;
        if (widthFactor > heightFactor)
          scaleFactor = widthFactor; // scale to fit height
        else
          scaleFactor = heightFactor; // scale to fit width
    
        scaledWidth= width * scaleFactor;
        scaledHeight = height * scaleFactor;
        // center the image
        if (widthFactor > heightFactor)
        {
          thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5;
        }
        else if (widthFactor < heightFactor)
        {
          thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5;
        }
      }
    
      UIGraphicsBeginImageContext(targetSize); // this will crop
      CGRect thumbnailRect = CGRectZero;
      thumbnailRect.origin = thumbnailPoint;
      thumbnailRect.size.width= scaledWidth;
      thumbnailRect.size.height = scaledHeight;
      [sourceImage drawInRect:thumbnailRect];
      newImage = UIGraphicsGetImageFromCurrentImageContext();
    
      if(newImage == nil)
        NSLog(@"could not scale image");
      //pop the context to get back to the default
      UIGraphicsEndImageContext();
    
      return newImage;
    
    }