一种优秀的 IOS 缩略图生成方案

源码图

下发附上源码,方便大家研究

- (void)setThumbnailFromImage:(UIImage*)image {

CGSizeoriginImageSize = image.size;

CGRectnewRect =CGRectMake(0,0,40,40);

//根据当前屏幕scaling factor创建一个透明的位图图形上下文(此处不能直接从UIGraphicsGetCurrentContext获取,原因是UIGraphicsGetCurrentContext获取的是上下文栈的顶,在drawRect:方法里栈顶才有数据,其他地方只能获取一个nil.详情看文档)

UIGraphicsBeginImageContextWithOptions(newRect.size,NO,0.0);

//保持宽高比例,确定缩放倍数

//(原图的宽高做分母,导致大的结果比例更小,做MAX后,ratio*原图长宽得到的值最小是40,最大则比40大,这样的好处是可以让原图在画进40*40的缩略矩形画布时,origin可以取=(缩略矩形长宽减原图长宽*ratio)/2 ,这样可以得到一个可能包含负数的origin,结合缩放的原图长宽size之后,最终原图缩小后的缩略图中央刚好可以对准缩略矩形画布中央)

floatratio =MAX(newRect.size.width/ originImageSize.width, newRect.size.height/ originImageSize.height);

//创建一个圆角的矩形UIBezierPath对象

UIBezierPath*path = [UIBezierPathbezierPathWithRoundedRect:newRectcornerRadius:5.0];

//用Bezier对象裁剪上下文

[pathaddClip];

//让image在缩略图范围内居中()

CGRectprojectRect;

projectRect.size.width= originImageSize.width* ratio;

projectRect.size.height= originImageSize.height* ratio;

projectRect.origin.x= (newRect.size.width- projectRect.size.width) /2;

projectRect.origin.y= (newRect.size.height- projectRect.size.height) /2;

//在上下文中画图

[imagedrawInRect:projectRect];

//从图形上下文获取到UIImage对象,赋值给thumbnai属性

UIImage*smallImg =UIGraphicsGetImageFromCurrentImageContext();

self.thumbnail= smallImg;

//清理图形上下文(用了UIGraphicsBeginImageContext需要清理)

UIGraphicsEndImageContext();

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转载:http://www.cocoachina.com/swift/20161201/18198.html 前言...
    F麦子阅读 4,373评论 2 8
  • 教程一:视频截图(Tutorial 01: Making Screencaps) 首先我们需要了解视频文件的一些基...
    90后的思维阅读 4,794评论 0 3
  • 各种纯css图标 CSS3可以实现很多漂亮的图形,我收集了32种图形,在下面列出。直接用CSS3画出这些图形,要比...
    剑残阅读 9,700评论 0 8
  • 陆遇晚风 第四章 我等你 林晚风把房东太太请进屋,放下包去厨房倒了一杯水,出来的时候没在客厅沙发看见房东太太,听见...
    小楼今夜可东风阅读 640评论 0 0
  • 有时不开心的时候,我就想办法让你高兴起来。比如今天起床我看你样子麻烦可能要来,于是我赶紧的唱起来:“你是我的,你是...
    安尼王阅读 158评论 0 0