iOS開發(fā) 實(shí)現(xiàn)手機(jī)屏幕指定區(qū)域截屏

指定截屏代碼實(shí)現(xiàn)

全屏截圖效果

全屏截圖效果

指定區(qū)域截屏效果

指定區(qū)域截屏效果

這里先上代碼渣叛,代碼后面有相關(guān)方法的解釋

第一種方法
代碼下載

 /**
  創(chuàng)建一個基于位圖的上下文(context),并將其設(shè)置為當(dāng)前上下文(context)

  @param size 參數(shù)size為新創(chuàng)建的位圖上下文的大小能真。它同時是由UIGraphicsGetImageFromCurrentImageContext函數(shù)返回的圖形大小
  @param opaque 透明開關(guān)呆抑,如果圖形完全不用透明惊楼,設(shè)置為YES以優(yōu)化位圖的存儲抱既,我們得到的圖片背景將會是黑色僻澎,使用NO涩盾,表示透明,圖片背景色正常
  @param scale 縮放因子 iPhone 4是2.0敷硅,其他是1.0功咒。雖然這里可以用[UIScreen mainScreen].scale來獲取,但實(shí)際上設(shè)為0后绞蹦,系統(tǒng)就會自動設(shè)置正確的比例了
  */
   UIGraphicsBeginImageContextWithOptions([[UIScreen mainScreen] bounds].size, YES, 0.0);
   UIView * view = [[UIScreen mainScreen] snapshotViewAfterScreenUpdates:YES];
//把控制器View的內(nèi)容繪制到上下文當(dāng)中.
//layer是不能夠直接繪制的.要用渲染的方法才能夠讓它繪制到上下文當(dāng)中力奋。UIGraphicsGetCurrentContext()
    [view.layer renderInContext:UIGraphicsGetCurrentContext()];
//從上下文當(dāng)中生成一張圖片
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
//關(guān)閉上下文.
    UIGraphicsEndImageContext();
/*
//image:要把圖片轉(zhuǎn)成二進(jìn)制流,compressionQuality:可壓縮質(zhì)量.
NSData*data =UIImagePNGRepresentation(viewImage);
    */

//上面我們獲得了一個全屏的截圖幽七,下邊的方法是對這個圖片進(jìn)行裁剪景殷。
    CGImageRef imageRef =viewImage.CGImage;
    //這里要特別注意,這里的寬度 CGImageGetWidth(imageRef) 是圖片的像素寬(高度同解)澡屡,所以計算截圖區(qū)域時需要按比例來猿挚;
//這里舉的例子是寬高屏幕1/2位置在中心
    CGRect rect =  CGRectMake(CGImageGetWidth(imageRef)/4, CGImageGetHeight(imageRef)/2-CGImageGetWidth(imageRef)/2, CGImageGetWidth(imageRef)/2, CGImageGetWidth(imageRef)/2);//這里可以設(shè)置想要截圖的區(qū)域
    
    CGImageRef imageRefRect =CGImageCreateWithImageInRect(imageRef, rect);
    
    UIImage *sendImage =[[UIImage alloc] initWithCGImage:imageRefRect];

第二種方法
代碼下載

    //設(shè)置邊框?qū)挾?    CGFloat borderWH = 5;
    //圖片寬度(像素)
    CGFloat imageWH = self.baseImageView.image.size.width;
    NSLog(@"=========%f",imageWH);
    
    //開啟一個位圖上下文(W = imageWH + 2 * border H = imageWH + 2 * border)
    CGSize size =CGSizeMake(imageWH + 2*borderWH, imageWH + 2*borderWH);
    
    UIGraphicsBeginImageContextWithOptions(size,NO,0);
    
    //繪制一個圓形的形狀.
    UIBezierPath*path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0,0, size.width, size.height)];
    
    //邊框顏色
    UIColor *color = [UIColor redColor];
    [color set];
    
    [path fill];
    
    //設(shè)置一個小圓,并設(shè)置成裁剪區(qū)域
    path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(borderWH, borderWH, imageWH, imageWH)];
    
    //把路徑設(shè)置成裁剪區(qū)域
    [path addClip];
    
    //把圖片繪制到上下文當(dāng)中.
    [self.baseImageView.image drawAtPoint:CGPointMake(borderWH, borderWH)];
    
    //從上下文當(dāng)中生成一張圖片
    UIImage*newImage =UIGraphicsGetImageFromCurrentImageContext();
    
    //關(guān)閉上下文.
    UIGraphicsEndImageContext();
    
    self.bottonImageView.image = newImage;

相關(guān)知識詳解

UIGraphicsBeginImageContext創(chuàng)建一個基于位圖的上下文(context),并將其設(shè)置為當(dāng)前上下文(context)。方法聲明如下:

void UIGraphicsBeginImageContext(CGSize size);

參數(shù)size為新創(chuàng)建的位圖上下文的大小驶鹉。它同時是UIGraphicsGetImageFromCurrentImageContext函數(shù)返回的圖形大小绩蜻。
該函數(shù)的功能同UIGraphicsBeginImageContextWithOptions的功能相同,相當(dāng)與UIGraphicsBeginImageContextWithOptionsopaque參數(shù)為NO室埋,scale因子為1.0办绝。

UIGraphicsBeginImageContextWithOptions函數(shù)原型為:

void UIGraphicsBeginImageContextWithOptions(CGSize size, BOOL opaque, CGFloat scale);

size——同UIGraphicsBeginImageContext
opaque—透明開關(guān),如果圖形完全不用透明姚淆,設(shè)置為YES以優(yōu)化位圖的存儲孕蝉。
scale—–縮放因子 iPhone 4是2.0,其他是1.0腌逢。雖然這里可以用[UIScreen mainScreen].scale來獲取降淮,但實(shí)際上設(shè)為0后,系統(tǒng)就會自動設(shè)置正確的比例了搏讶。


其他的截屏方法

第二種
這是在比較常見的截圖方法佳鳖,不過不支持Retina屏幕。


    UIGraphicsBeginImageContext(self.view.frame.size);
    [self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;

第三種
從iPhone 4媒惕、iPod Touch 4開始系吩,Apple逐漸采用Retina屏幕,于是在iOS 4的SDK中我們有了吓笙,上面的截圖方法也自然變成了這樣。

  UIGraphicsBeginImageContextWithOptions(self.view.frame.size, NO, 0.0);
    [self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;

第四種
或許你會說有時Hook的是一個按鈕的方法巾腕,用第三個方法的話面睛,根本找不到view來傳值絮蒿,不過還好,iOS 7又提供了一些UIScreen的API叁鉴。

    UIView * view = [[UIScreen mainScreen] snapshotViewAfterScreenUpdates:YES];
        UIGraphicsBeginImageContextWithOptions(view.frame.size, NO, 0.0);
    [view.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末土涝,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子幌墓,更是在濱河造成了極大的恐慌但壮,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件常侣,死亡現(xiàn)場離奇詭異蜡饵,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)胳施,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門溯祸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人舞肆,你說我怎么就攤上這事焦辅。” “怎么了椿胯?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵筷登,是天一觀的道長。 經(jīng)常有香客問我哩盲,道長前方,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任种冬,我火速辦了婚禮镣丑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘娱两。我一直安慰自己莺匠,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布十兢。 她就那樣靜靜地躺著趣竣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪旱物。 梳的紋絲不亂的頭發(fā)上遥缕,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天,我揣著相機(jī)與錄音宵呛,去河邊找鬼单匣。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的户秤。 我是一名探鬼主播码秉,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼鸡号!你這毒婦竟也來了转砖?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤鲸伴,失蹤者是張志新(化名)和其女友劉穎府蔗,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體汞窗,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡姓赤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了杉辙。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片模捂。...
    茶點(diǎn)故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蜘矢,靈堂內(nèi)的尸體忽然破棺而出狂男,到底是詐尸還是另有隱情,我是刑警寧澤品腹,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布岖食,位于F島的核電站,受9級特大地震影響舞吭,放射性物質(zhì)發(fā)生泄漏泡垃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一羡鸥、第九天 我趴在偏房一處隱蔽的房頂上張望蔑穴。 院中可真熱鬧,春花似錦惧浴、人聲如沸存和。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽捐腿。三九已至,卻和暖如春柿顶,著一層夾襖步出監(jiān)牢的瞬間茄袖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工嘁锯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留宪祥,地道東北人聂薪。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像蝗羊,于是被迫代替她去往敵國和親胆建。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評論 2 355

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