一種優(yōu)秀的 IOS 縮略圖生成方案

源碼圖

下發(fā)附上源碼,方便大家研究

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

CGSizeoriginImageSize = image.size;

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

//根據當前屏幕scaling factor創(chuàng)建一個透明的位圖圖形上下文(此處不能直接從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);

//創(chuàng)建一個圓角的矩形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();

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 轉載:http://www.cocoachina.com/swift/20161201/18198.html 前言...
    F麥子閱讀 4,513評論 2 8
  • 教程一:視頻截圖(Tutorial 01: Making Screencaps) 首先我們需要了解視頻文件的一些基...
    90后的思維閱讀 4,992評論 0 3
  • 各種純css圖標 CSS3可以實現很多漂亮的圖形,我收集了32種圖形,在下面列出。直接用CSS3畫出這些圖形,要比...
    劍殘閱讀 9,996評論 0 8
  • 陸遇晚風 第四章 我等你 林晚風把房東太太請進屋,放下包去廚房倒了一杯水,出來的時候沒在客廳沙發(fā)看見房東太太,聽見...
    小樓今夜可東風閱讀 698評論 0 0
  • 有時不開心的時候,我就想辦法讓你高興起來。比如今天起床我看你樣子麻煩可能要來,于是我趕緊的唱起來:“你是我的,你是...
    安尼王閱讀 169評論 0 0

友情鏈接更多精彩內容