iOS开发之UIImage等比缩放
2015-08-05 10:45
323 查看
前面讲了截取UIImage指定大小区域,很方便的截取
两种缩放:
缩放到指定大小,也就是指定的
等比缩放。
。
很久之前写了一篇文章解决MWPhotoBrowser中的SDWebImage加载大图导致的内存警告问题。这个我记得当时从服务器拿到的照片大概有10几M的样子,加载出来会导致内存警告。所以我当时通过修改SDWebImage源码,就是把下载下来的照片进行缩放,内存就降下来了。一般情况下应该不会加载这么大的照片的,用户要是知道,早把你的APP给删掉了。
UIImage。今天要和大家分享的是
UIImage的缩放。
两种缩放:
缩放到指定大小,也就是指定的
size.
等比缩放。
缩放到指定大小
- (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给删掉了。
相关文章推荐
- SAPUI5 table getRows方法
- 自定义导航按钮UIBarButtonItem
- Cpp的队列(Queue)学习笔记
- Starting MySQL.Manager of pid-file quit without updating file.[FAILED]解决方法
- 【leetcode】Distinct Subsequences
- SAPUI5 标准控件 事件 addEventDelegate
- 使用SQLQuery 在Hibernate中使用sql语句
- XIB或者storyboard中嵌入自定义view(xib)的方法
- finished with non-zero exit value 42
- 计算UITableViewCell高度
- IOS UITableView删除功能
- Assertion failure in -[UITableViewCell layoutSublayersOfLayer:]
- 转:谈谈UI架构设计的演化
- Sequence
- Sequence 分类: 栈和队列 2015-08-05 10:10 2人阅读 评论(0) 收藏
- 上传大文件问题 413 (Request Entity Too Large)
- Number Sequence HDU1711 (kmp)
- 10个顶级的CSS UI开源框架
- Ultra-QuickSort - poj 2299 (归并排序+统计逆序数)
- iOS开发UI篇—Quartz2D简单使用(三)