UIImage擴(kuò)展

說起UIImage我們應(yīng)該都不會陌生紫岩,平常用的也比較多但是發(fā)現(xiàn)我自己只是用到了最基本的一些操作,近來我也是看邊學(xué)習(xí)然后分享一些學(xué)到的東西精偿,擴(kuò)展下這方面的內(nèi)容棘劣。我將會分享學(xué)到一下方面知識:

1.圖片任意角度旋轉(zhuǎn)
2.圖片裁剪剪切
3.圖片拉伸
4.截屏
5 圖片添加文字及水印

1.圖片任意位置角度旋轉(zhuǎn)

其實(shí)說起圖片旋轉(zhuǎn),我們基本都會想到講UIImageVIew frame旋轉(zhuǎn)一定角度至扰,這個其實(shí)是旋轉(zhuǎn)圖片所在視圖的View鳍徽,但是我們這個圖片旋轉(zhuǎn)是旋轉(zhuǎn)圖片本身,而不是旋轉(zhuǎn)View敢课。
下面就看具體代碼實(shí)現(xiàn)阶祭,改加注釋的地方我基本上都加了注釋

先看下效果圖,由于旋轉(zhuǎn)之后超出圖片原有尺寸范圍部分看不到了直秆,所以圖片旋轉(zhuǎn)之后會可視范圍越來越小最后是個正多邊形了:


test1.gif
//
//  UIImage+ImageRotate.m
//  UIImageViewExtend
//
//  Created by penglei on 2017/11/14.
//  Copyright ? 2017年 penglei. All rights reserved.
//

#import "UIImage+ImageRotate.h"
#import <QuartzCore/QuartzCore.h>
#import <Accelerate/Accelerate.h>

@implementation UIImage (ImageRotate)
/**
 將圖片內(nèi)容本身旋轉(zhuǎn)一定角度濒募,不是旋轉(zhuǎn)將UIImageView視圖旋轉(zhuǎn)
 @param degree 旋轉(zhuǎn)的弧度 比如旋轉(zhuǎn)45度應(yīng)該傳入 45*3.14/180
 @return 返回旋轉(zhuǎn)成功后的圖片
 */
- (UIImage *)imageRoateInegree:(float)degree {
    //圖片實(shí)際像素 等于圖片像素 *放大因子scale
    size_t width = (size_t)self.size.width * self.scale;
    size_t height = (size_t)self.size.height * self.scale;
    //表示每行圖片字節(jié)數(shù)
    size_t bytesRerRow = width * 4;
    CGImageAlphaInfo alphaInfo = kCGImageAlphaPremultipliedFirst;
    //配置上下文參數(shù)
    /*
     第一個參數(shù) 要渲染的繪制內(nèi)存地址,這個內(nèi)存塊的大小至少是(bytesPerRow*height)個字節(jié)圾结。如果傳空值瑰剃,則是由上下文自動分配的
     第二個參數(shù) 實(shí)際寬度像素
     第三個參數(shù) 實(shí)際像素高度
     第四個參數(shù) 內(nèi)存中像素每個組件位數(shù) 對于32位像素格式和RGB 顏色空間,你應(yīng)該將這個值設(shè)為8.
     第五個參數(shù) 每行所占字節(jié)數(shù)
     第六個參數(shù) 上下文使用的顏色空間
     第七個參數(shù) alpha通道 指定bitmap是否包含alpha通道筝野,像素中alpha通道的相對位置
    **/
    CGContextRef imageContext = CGBitmapContextCreate(NULL, width, height, 8, bytesRerRow, CGColorSpaceCreateDeviceRGB(), kCGBitmapByteOrderDefault | alphaInfo);
    if (!imageContext) {
        return nil;
    }
    CGContextDrawImage(imageContext, CGRectMake(0, 0, width, height), self.CGImage);
    /**
     旋轉(zhuǎn)圖片
     ARGB88 表示32位像素RGB位圖 正好對應(yīng)上面?zhèn)魅氲慕M件位數(shù) 8
     第一個參數(shù) 旋轉(zhuǎn)之前圖片
     第二個參數(shù) 旋轉(zhuǎn)之后圖片
     第三個參數(shù) 緩沖區(qū)晌姚,當(dāng)需要相當(dāng)短的時間內(nèi)頻繁調(diào)用函數(shù),或者需要實(shí)時
     *性能保證(使鎖問題)那么你應(yīng)該分配自己的臨時緩沖區(qū)遗座∫荩可傳空,有上下文自己分配
     第四個參數(shù) 旋轉(zhuǎn)角度
     第五個參數(shù) 背景顏色
     第六個參數(shù) 填充顏色
     */
    uint8_t *imagedata = (uint8_t *)CGBitmapContextGetData(imageContext);
    vImage_Buffer src = {imagedata,height,width,bytesRerRow};
    vImage_Buffer dest = {imagedata,height,width,bytesRerRow};
    //白色
    Pixel_8888 backColor = {0,0,0,0};
    vImageRotate_ARGB8888(&src, &dest,NULL,degree, backColor, kvImageBackgroundColorFill);
    CGImageRef rotateImageRef = CGBitmapContextCreateImage(imageContext);
    UIImage *rotateImage = [UIImage imageWithCGImage:rotateImageRef scale:self.scale orientation:self.imageOrientation];
    CFRelease(rotateImageRef);
    return rotateImage ;
}


@end

注意:1. 需要倒入頭文件<QuartzCore/QuartzCore.h> <Accelerate/Accelerate.h>

  1. 如果運(yùn)行過程中報(bào)錯

CGBitmapContextCreate: unsupported parameter combination: set CGBITMAP_CONTEXT_LOG_ERRORS environmental variable to see the details 請檢查CGImageAlphaInfo alphaInfo = kCGImageAlphaPremultipliedFirst途蒋;是否配置正確猛遍。
題外話:我也是邊看邊學(xué),不知不覺已經(jīng)快凌晨一點(diǎn)了剩下的明天夜晚再補(bǔ)充吧号坡。先晚安??

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末懊烤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子宽堆,更是在濱河造成了極大的恐慌腌紧,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件畜隶,死亡現(xiàn)場離奇詭異壁肋,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)籽慢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進(jìn)店門浸遗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人箱亿,你說我怎么就攤上這事跛锌。” “怎么了届惋?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵髓帽,是天一觀的道長菠赚。 經(jīng)常有香客問我,道長郑藏,這世上最難降的妖魔是什么衡查? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮译秦,結(jié)果婚禮上峡捡,老公的妹妹穿的比我還像新娘。我一直安慰自己筑悴,他們只是感情好们拙,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著阁吝,像睡著了一般砚婆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上突勇,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天装盯,我揣著相機(jī)與錄音,去河邊找鬼甲馋。 笑死埂奈,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的定躏。 我是一名探鬼主播账磺,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼痊远!你這毒婦竟也來了垮抗?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤碧聪,失蹤者是張志新(化名)和其女友劉穎冒版,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體逞姿,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡辞嗡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了滞造。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片欲间。...
    茶點(diǎn)故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖断部,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情班缎,我是刑警寧澤蝴光,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布她渴,位于F島的核電站,受9級特大地震影響蔑祟,放射性物質(zhì)發(fā)生泄漏趁耗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一疆虚、第九天 我趴在偏房一處隱蔽的房頂上張望苛败。 院中可真熱鬧,春花似錦径簿、人聲如沸罢屈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽缠捌。三九已至,卻和暖如春译蒂,著一層夾襖步出監(jiān)牢的瞬間曼月,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工柔昼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留哑芹,地道東北人。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓捕透,卻偏偏與公主長得像聪姿,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子激率,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容

  • UIImage+GIF 1.封裝了gif動畫實(shí)現(xiàn) 2.imgView執(zhí)行動畫+圖片集+重復(fù)次數(shù) 3.高斯模糊 4....
    小小希奇幻記閱讀 342評論 0 0
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,180評論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫咳燕、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,107評論 4 62
  • 時光抓不住乒躺,歲月總是在“銀河”漂泊招盲,何時是盡頭?我可問誰嘉冒?此刻的“停留”曹货,換來我一段的記憶,有過追戀讳推。 ...
    刀水貝閱讀 118評論 0 2
  • 作為一個典型的天蝎座顶籽,不得不說我確實(shí)屬于外冷內(nèi)熱型,只是每個天蝎的表現(xiàn)方式都不同银觅。我不會要求自己像圣人和...
    妖艷賤客閱讀 191評論 2 0