ios 圖片部分截圖

weixin_34393428發表於2016-11-03

實現思路:首先進行全屏截圖,在進行區域性截圖,就這麼簡單;

1.全屏截圖:

- (UIImage *)getSnapshotImage {  UIGraphicsBeginImageContextWithOptions(CGSizeMake(CGRectGetWidth(self.view.frame), CGRectGetHeight(self.view.frame)), NO, 1);   

 [self.view drawViewHierarchyInRect:CGRectMake(0, 0, CGRectGetWidth(self.view.frame), CGRectGetHeight(self.view.frame)) afterScreenUpdates:NO];    

UIImage *snapshot = UIGraphicsGetImageFromCurrentImageContext();    UIGraphicsEndImageContext();   

 return snapshot;

}

2.部分截圖

+ (UIImage *)ct_imageFromImage:(UIImage *)image inRect:(CGRect)rect{  

  //把像 素rect 轉化為 點rect(如無轉化則按原影象素取部分圖片)

//    CGFloat scale = [UIScreen mainScreen].scale;

//    CGFloat x= rect.origin.x*scale,y=rect.origin.y*scale,w=rect.size.width*scale,h=rect.size.height*scale;//    CGRect dianRect = CGRectMake(x, y, w, h);       

 //擷取部分圖片並生成新圖片   

 CGImageRef sourceImageRef = [image CGImage];  

  CGImageRef newImageRef = CGImageCreateWithImageInRect(sourceImageRef, rect);    UIImage *newImage = [UIImage imageWithCGImage:newImageRef scale:[UIScreen mainScreen].scale orientation:UIImageOrientationUp];    

return newImage;

}

3.拖動檢視 

UIPanGestureRecognizer * panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self                                                                                      action:@selector(doHandlePanAction:)]; 

 [_areaIamgeView addGestureRecognizer:panGestureRecognizer];

-(void)doHandlePanAction:(UIPanGestureRecognizer *)paramSender{    

CGPoint point = [paramSender translationInView:self.view];    paramSender.view.center = CGPointMake(paramSender.view.center.x + point.x, paramSender.view.center.y + point.y);    [paramSender setTranslation:CGPointMake(0, 0) inView:self.view];

}


直接上程式碼,可以直接貼上複製執行:(不要在意細節)

#import@interface ViewController : UIViewController

@end

#import "ViewController.h"

@interface ViewController ()

@property(nonatomic,strong)UIImageView *backImageView;

@property(nonatomic,strong)UIImageView *areaIamgeView;

@end

@implementation ViewController{

UIView *_backView;

CGRect _rect;

}

- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

[self backImageView];

[self areaIamgeView];

UIButton *button=[UIButton buttonWithType:UIButtonTypeCustom];

button.frame=CGRectMake(0, self.view.frame.size.height-44, self.view.frame.size.width, 44);

button.backgroundColor=[UIColor blueColor];

[button addTarget:self action:@selector(buttonClick) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:button];

}

//這裡對檢視進行拖動

-(void)doHandlePanAction:(UIPanGestureRecognizer *)paramSender{

CGPoint point = [paramSender translationInView:self.view];

NSLog(@"X:%f;Y:%f",point.x,point.y);

paramSender.view.center = CGPointMake(paramSender.view.center.x + point.x, paramSender.view.center.y + point.y);

[paramSender setTranslation:CGPointMake(0, 0) inView:self.view];

}

-(void)jietu{

UIImage *image=[self getSnapshotImage];

_backView=[[UIView alloc]initWithFrame:self.view.frame];

_backView.backgroundColor=[UIColor whiteColor];

[self.view addSubview:_backView];

UIButton *button=[UIButton buttonWithType:UIButtonTypeCustom];

button.frame=CGRectMake(0, self.view.frame.size.height-44, self.view.frame.size.width, 44);

button.backgroundColor=[UIColor blueColor];

[button addTarget:self action:@selector(cancelButtonClick) forControlEvents:UIControlEventTouchUpInside];

[_backView addSubview:button];

UIImageView *checkImageView=[[UIImageView alloc]init];

checkImageView.center=_backView.center;

checkImageView.bounds=CGRectMake(0, 0, 200, 200);

checkImageView.contentMode=UIViewContentModeScaleAspectFit;

[_backView addSubview:checkImageView];

UIImage *newImage=[ViewController ct_imageFromImage:image inRect:_rect];

checkImageView.image=newImage;

}

-(void)buttonClick{

NSLog(@"%f,%f,%f,%f",self.areaIamgeView.frame.origin.x,self.areaIamgeView.frame.origin.y,self.areaIamgeView.frame.size.width,self.areaIamgeView.frame.size.height);

_rect=self.areaIamgeView.frame;

_areaIamgeView.alpha=0;

[self performSelector:@selector(jietu) withObject:nil afterDelay:0.05];

}

//得到全屏截圖

- (UIImage *)getSnapshotImage {

UIGraphicsBeginImageContextWithOptions(CGSizeMake(CGRectGetWidth(self.view.frame), CGRectGetHeight(self.view.frame)), NO, 1);

[self.view drawViewHierarchyInRect:CGRectMake(0, 0, CGRectGetWidth(self.view.frame), CGRectGetHeight(self.view.frame)) afterScreenUpdates:NO];

UIImage *snapshot = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

return snapshot;

}

//擷取部分圖片

+ (UIImage *)ct_imageFromImage:(UIImage *)image inRect:(CGRect)rect{

//把像 素rect 轉化為 點rect(如無轉化則按原影象素取部分圖片)

//    CGFloat scale = [UIScreen mainScreen].scale;

//    CGFloat x= rect.origin.x*scale,y=rect.origin.y*scale,w=rect.size.width*scale,h=rect.size.height*scale;

//    CGRect dianRect = CGRectMake(x, y, w, h);

//擷取部分圖片並生成新圖片

CGImageRef sourceImageRef = [image CGImage];

CGImageRef newImageRef = CGImageCreateWithImageInRect(sourceImageRef, rect);

UIImage *newImage = [UIImage imageWithCGImage:newImageRef scale:[UIScreen mainScreen].scale orientation:UIImageOrientationUp];

return newImage;

}

-(void)cancelButtonClick{

self.areaIamgeView.alpha=1;

[_backView removeFromSuperview];

}

-(UIImageView *)backImageView{

if (!_backImageView) {

_backImageView=[[UIImageView alloc]init];

_backImageView.frame=self.view.frame;

_backImageView.image=[UIImage imageNamed:@"1.jpg"];

_backImageView.contentMode=UIViewContentModeScaleAspectFit;

[self.view addSubview:_backImageView];

}

return _backImageView;

}

-(UIImageView *)areaIamgeView{

if (!_areaIamgeView) {

_areaIamgeView=[[UIImageView alloc]init];

_areaIamgeView.center=self.view.center;

_areaIamgeView.bounds=CGRectMake(0, 0, 100, 100);

_areaIamgeView.backgroundColor=[UIColor whiteColor];

_areaIamgeView.alpha=0.8;

_areaIamgeView.userInteractionEnabled=YES;

UIPanGestureRecognizer * panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self

action:@selector(doHandlePanAction:)];

[_areaIamgeView addGestureRecognizer:panGestureRecognizer];

[self.view addSubview:_areaIamgeView];

}

return _areaIamgeView;

}

- (void)didReceiveMemoryWarning {

[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

@end

相關文章