iOS开发之UIImage等比缩放

jopen 9年前

前面讲了截取UIImage指定大小区域,很方便的截取UIImage。今天要和大家分享的是UIImage的缩放。

两种缩放:

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

缩放到指定大小

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

等比缩放

通过缩放系数

- (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是缩放系数 。

通过计算得到缩放系数

- (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;    }

很久之前写了一篇文章解决MWPhotoBrowser中的SDWebImage加载大图导致的内存警告问题。这个我记得当时从服务器拿到的照片大概有10几M的样子,加载出来会导致内存警告。所以我当时通过修改SDWebImage源码,就是把下载下来的照片进行缩放,内存就降下来了。一般情况下应该不会加载这么大的照片的,用户要是知道,早把你的APP给删掉了。

Posted by 李刚 Jul 29th, 2015 12:01 am ios开发
来源:刚刚在线(微信:iOSDevTip),欢迎分享本文,转载请保留出处!
原文链接:http://www.superqq.com/blog/2015/07/29/uiimage-geometric-zoom/