iOS开发之UIImage等比缩放

来源:互联网 发布:电气工程制图软件 编辑:程序博客网 时间:2024/06/06 11:04

前面讲了截取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给删掉了。

0 0
原创粉丝点击