打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
iOS开发之UIImage等比缩放

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

作者李刚是刚刚在线( www.superqq.com )站长,百度百家专栏作者

iOS工程师非著名自媒体,微信公众号iOS开发:iOSDevTip运营者

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
IOS图片压缩
UIImage的放缩
UIimageView图片自适应大小
iOS UIImage扩展方法(category):放大、旋转、合并UIImage、增加渐变层、添加阴影、调节透明度、保存到相册
Windows8裁切图片的一部分
ios 图片压缩
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服