图像之超简单方式实现微信头像功能

//直接使用下面函数就可以实现微信头像功能

//m文件

import “headImageViewController.h”

@interface headImageViewController ()
@property (strong, nonatomic) IBOutlet UIImageView *photoImage;
@property (assign ,nonatomic)CGPoint startpoint;
@property (strong, nonatomic)IBOutlet UIImageView *imageView;
@property (strong, nonatomic)UIImage *selectImage;
@property (strong, nonatomic)IBOutlet UIButton *okbut;
@property (strong, nonatomic)IBOutlet UIButton *cancelbut;
@end

@implementation headImageViewController

  • (void)viewDidLoad {
    [super viewDidLoad];
    self.imageView.image = self.selectImage;

    UIPinchGestureRecognizer *pinchGestureRecognizermiddle = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchView:)];

    UIPanGestureRecognizer *panGestureRecognizermiddle = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panView:)];

    self.photoImage.hidden=YES;
    [self.okbut setTitle:NSLocalizedString(@”Select”, “”) forState:UIControlStateNormal];
    [self.cancelbut setTitle:NSLocalizedString(@”Cancel”,”“) forState:UIControlStateNormal];

    UIView *viewup = [[UIView alloc]initWithFrame:CGRectMake(0, 0, kDeviceWidth, ((kDeviceHeight - 49 -kDeviceWidth)/2))];
    viewup.backgroundColor = [UIColor blackColor];
    viewup.alpha = 0.4;
    [self.view addSubview:viewup];

    UIView *viewmiddle = [[UIView alloc]initWithFrame:CGRectMake(0, 0, kDeviceWidth, kDeviceHeight - 49)];
    viewmiddle.backgroundColor = [UIColor clearColor];
    [self.view addSubview:viewmiddle];
    [viewmiddle addGestureRecognizer:pinchGestureRecognizermiddle];
    [viewmiddle addGestureRecognizer:panGestureRecognizermiddle];

    UIView *viewdown = [[UIView alloc]initWithFrame:CGRectMake(0, (kDeviceHeight - 49 -kDeviceWidth)/2 + kDeviceWidth + 2, kDeviceWidth, (kDeviceHeight - 49 - kDeviceWidth)/2 - 2)];
    viewdown.backgroundColor = [UIColor blackColor];
    viewdown.alpha = 0.4;
    [self.view addSubview:viewdown];

    UIView *leftline = [[UIView alloc]initWithFrame:CGRectMake(0, (kDeviceHeight - 49 - kDeviceWidth)/2, 2, kDeviceWidth)];
    leftline.backgroundColor = [UIColor whiteColor];
    [self.view addSubview:leftline];

    UIView *upperline = [[UIView alloc]initWithFrame:CGRectMake(0, (kDeviceHeight - 49 - kDeviceWidth)/2, kDeviceWidth, 2)];
    upperline.backgroundColor = [UIColor whiteColor];
    [self.view addSubview:upperline];

    UIView *rightline = [[UIView alloc]initWithFrame:CGRectMake(kDeviceWidth - 2, (kDeviceHeight - 49 -kDeviceWidth)/2, 2, kDeviceWidth)];
    rightline.backgroundColor = [UIColor whiteColor];
    [self.view addSubview:rightline];

    UIView *lowerline = [[UIView alloc]initWithFrame:CGRectMake(0, (kDeviceHeight - 49 - kDeviceWidth)/2 + kDeviceWidth, kDeviceWidth, 2)];
    lowerline.backgroundColor = [UIColor whiteColor];
    [self.view addSubview:lowerline];

    [viewmiddle bringSubviewToFront:self.view];
    }

-(void)viewWillAppear:(BOOL)animated
{
[self performSelector:@selector(fitimageview) withObject:nil afterDelay:0.1];
}

// 处理拖拉手势
- (void) panView:(UIPanGestureRecognizer *)panGestureRecognizer
{
if (panGestureRecognizer.state == UIGestureRecognizerStateBegan || panGestureRecognizer.state == UIGestureRecognizerStateChanged) {
CGPoint translation = [panGestureRecognizer translationInView:self.imageView.superview];

    CGPoint point = CGPointMake(self.imageView.center.x + translation.x, self.imageView.center.y + translation.y);



    CGPoint point1 = CGPointMake(self.imageView.center.x  + translation.x - self.imageView.frame.size.width/2, self.imageView.center.y + translation.y - self.imageView.frame.size.height/2);


     CGPoint point2 = CGPointMake(self.imageView.center.x  + translation.x + self.imageView.frame.size.width/2, self.imageView.center.y + translation.y - self.imageView.frame.size.height/2);

     CGPoint point3 = CGPointMake(self.imageView.center.x  + translation.x + self.imageView.frame.size.width/2, self.imageView.center.y + translation.y + self.imageView.frame.size.height/2);

     CGPoint point4 = CGPointMake(self.imageView.center.x  + translation.x + self.imageView.frame.size.width/2, self.imageView.center.y + translation.y + self.imageView.frame.size.height/2);
    point2 = CGPointMake(0,(kDeviceHeight - 49 -kDeviceWidth)/2);
     point3 = CGPointMake(0,(kDeviceHeight - 49 -kDeviceWidth)/2 + kDeviceWidth);
   CGPoint lastpoint = [self movefitsize:point Firstpoint:point1 Lastpoint:point4 LimitFirstpoint:point2 LimitLastpoint:point3];

     if (!(point.x == lastpoint.x && point.y == lastpoint.y)) {
        [UIView animateWithDuration:0.2
                              delay:0.0
                            options: UIViewAnimationOptionCurveEaseIn
                         animations:^{
                             [self.imageView setCenter:point];
                         }
                         completion:^(BOOL finished){

                             [UIView animateWithDuration:0.3
                                                   delay:0.0
                                                 options: UIViewAnimationOptionCurveEaseIn
                                              animations:^{
                                                  [self.imageView setCenter:lastpoint];
                                              }
                                              completion:^(BOOL finished){
                                              }];

                         }];

    }else
    {
        [self.imageView setCenter:lastpoint];
    }
    [panGestureRecognizer setTranslation:CGPointZero inView:self.imageView.superview];
}

}

-(void)fitimageview
{

self.imageView.frame = CGRectMake(0, (kDeviceHeight - 49 - (kDeviceWidth *self.imageView.image.size.height /(self.imageView.image.size.width*1.0)))/2 , kDeviceWidth, (kDeviceWidth *self.imageView.image.size.height /(self.imageView.image.size.width *1.0)) );
self.startpoint =CGPointMake(self.imageView.frame.size.width, self.imageView.frame.size.height);

}

-(CGPoint)movefitsize:(CGPoint)Originalpoint Firstpoint:(CGPoint)firstpoint Lastpoint:(CGPoint)lastpoint LimitFirstpoint:(CGPoint)limitfirstpoint LimitLastpoint:(CGPoint)limitlastpoint
{
CGPoint point =CGPointMake(Originalpoint.x, Originalpoint.y);

if (firstpoint.x <= 0 && firstpoint.y <= limitfirstpoint.y && lastpoint.x > kDeviceWidth && lastpoint.y > limitlastpoint.y   ){

    point = CGPointMake(Originalpoint.x, Originalpoint.y);

}else if (firstpoint.x > 0 && firstpoint.y <= limitfirstpoint.y && lastpoint.x > kDeviceWidth && lastpoint.y > (limitlastpoint.y)   ){
    point = CGPointMake(Originalpoint.x - firstpoint.x, Originalpoint.y);

}else if (firstpoint.x <= 0 && firstpoint.y > limitfirstpoint.y && lastpoint.x > kDeviceWidth && lastpoint.y > (limitlastpoint.y)   ){

    point = CGPointMake(Originalpoint.x , Originalpoint.y -(firstpoint.y - limitfirstpoint.y));

}else if (firstpoint.x <= 0 && firstpoint.y <= limitfirstpoint.y && lastpoint.x < kDeviceWidth && lastpoint.y > (limitlastpoint.y)   ){
    point = CGPointMake(Originalpoint.x + kDeviceWidth - lastpoint.x , Originalpoint.y );

}else if (firstpoint.x <= 0 && firstpoint.y <= limitfirstpoint.y && lastpoint.x > kDeviceWidth && lastpoint.y < (limitlastpoint.y)   ){
    point = CGPointMake(Originalpoint.x  , Originalpoint.y + (limitlastpoint.y) - lastpoint.y );

}else if (firstpoint.x > 0 && firstpoint.y > limitfirstpoint.y && lastpoint.x > kDeviceWidth && lastpoint.y > (limitlastpoint.y)   ){
    point = CGPointMake(Originalpoint.x - firstpoint.x, Originalpoint.y -(firstpoint.y - limitfirstpoint.y));

}else if (firstpoint.x <= 0 && firstpoint.y > limitfirstpoint.y && lastpoint.x < kDeviceWidth && lastpoint.y > (limitlastpoint.y)   ){
    point = CGPointMake(Originalpoint.x + kDeviceWidth - lastpoint.x, Originalpoint.y -(firstpoint.y - limitfirstpoint.y));

}else if (firstpoint.x <= 0 && firstpoint.y <= limitfirstpoint.y && lastpoint.x < kDeviceWidth && lastpoint.y < (limitlastpoint.y)   ){

    point = CGPointMake(Originalpoint.x + kDeviceWidth - lastpoint.x, Originalpoint.y + (limitlastpoint.y) - lastpoint.y);

}else if (firstpoint.x > 0 && firstpoint.y <= limitfirstpoint.y && lastpoint.x > kDeviceWidth && lastpoint.y < (limitlastpoint.y)   ){

    point = CGPointMake(Originalpoint.x - firstpoint.x, Originalpoint.y + (limitlastpoint.y) - lastpoint.y);

}else{
}
return point;

}

  • (IBAction)cancelbut:(UIButton *)sender {
    [self dismissViewControllerAnimated:YES completion:nil];
    }

// 处理缩放手势
- (void) pinchView:(UIPinchGestureRecognizer *)pinchGestureRecognizer
{
if (pinchGestureRecognizer.state == UIGestureRecognizerStateBegan || pinchGestureRecognizer.state == UIGestureRecognizerStateChanged) {
self.imageView.transform = CGAffineTransformScale(self.imageView.transform, pinchGestureRecognizer.scale, pinchGestureRecognizer.scale);
pinchGestureRecognizer.scale = 1;

}
if (pinchGestureRecognizer.state == UIGestureRecognizerStateEnded&self.imageView.frame.size.width <kDeviceWidth) {
    [UIView animateWithDuration:0.2
                          delay:0
                        options: UIViewAnimationOptionCurveEaseIn
                     animations:^{
                         self.imageView.transform = CGAffineTransformScale(self.imageView.transform, kDeviceWidth/self.imageView.frame.size.width*1.1,  kDeviceWidth/self.imageView.frame.size.width*1.1);
                     }
                     completion:^(BOOL finished){

                         [UIView animateWithDuration:0.2
                                               delay:0
                                             options: UIViewAnimationOptionCurveEaseIn
                                          animations:^{
                                              self.imageView.transform = CGAffineTransformScale(self.imageView.transform, kDeviceWidth/self.imageView.frame.size.width,  kDeviceWidth/self.imageView.frame.size.width);
                                          }
                                          completion:^(BOOL finished){
                                          }];

                     }];
}

}

  • (IBAction)selectbut:(UIButton *)sender {
    float offset =1.0;

    offset = self.imageView.image.size.width/self.imageView.frame.size.width;

    CGPoint point2 = CGPointMake(0,(kDeviceHeight - 49 -kDeviceWidth)/2);
    CGPoint point3 = CGPointMake(kDeviceWidth,(kDeviceHeight - 49 -kDeviceWidth)/2 + kDeviceWidth);

    CGPoint centerpoint = [self.imageView.layer convertPoint:point2 fromLayer:self.view.layer];

    CGPoint centerpoint2 = [self.imageView.layer convertPoint:point3 fromLayer:self.view.layer];

    centerpoint = CGPointMake(centerpoint.x *self.imageView.frame.size.width/ self.startpoint.x ,centerpoint.y *self.imageView.frame.size.height/ self.startpoint.y);

    centerpoint2 = CGPointMake(centerpoint2.x *self.imageView.frame.size.width/ self.startpoint.x ,centerpoint2.y *self.imageView.frame.size.height/ self.startpoint.y);

    if (centerpoint.x < 0.0) {
    centerpoint = CGPointMake(0,centerpoint.y);
    }
    if (centerpoint.x > self.imageView.frame.size.width) {
    centerpoint = CGPointMake(0,centerpoint.y);
    }
    if (centerpoint.y < 0.0) {
    centerpoint = CGPointMake(centerpoint.x,0);
    }
    if (centerpoint.y > self.imageView.frame.size.height) {
    centerpoint = CGPointMake(centerpoint.x,0);
    }

    if (centerpoint2.x < 0.0) {
    centerpoint2 = CGPointMake(self.imageView.frame.size.width,centerpoint2.y);
    }
    if (centerpoint2.x > self.imageView.frame.size.width) {
    centerpoint2 = CGPointMake(self.imageView.frame.size.width,centerpoint2.y);
    }
    if (centerpoint2.y < 0.0) {
    centerpoint2 = CGPointMake(centerpoint2.x,self.imageView.frame.size.height);
    }
    if (centerpoint2.y > self.imageView.frame.size.height) {
    centerpoint2 = CGPointMake(centerpoint2.x,self.imageView.frame.size.height);
    }

    CGPoint centerpoint3 = CGPointMake(((centerpoint.x + centerpoint2.x)/2.0)* offset, ((centerpoint.y + centerpoint2.y)/2.0)* offset );

    float width = (centerpoint2.x - centerpoint.x)* offset ;
    float hight = (centerpoint2.y - centerpoint.y)* offset ;

// 下面就是得到的图片
UIImage *image= [self getCutPartOfImage:self.imageView.image Width:width Hight:hight BeganPonit:centerpoint3];

}

-(UIImage )getCutPartOfImage:(UIImage )image Width:(float)width Hight:(float)hight BeganPonit:(CGPoint)point
{
@autoreleasepool {
Imageprocess *imageproc=[[Imageprocess alloc]init];
UIImage *newimage = [[UIImage alloc]init];
newimage = image;
CGSize size = CGSizeMake(width,hight);

    //get image
    UIImage *imagemodel = [[UIImage alloc]init];

//下面两个函数见我 《 图像之指定位置,指定大小切图》文章
(http://blog.csdn.net/f735614338/article/details/50776209)
newimage = [imageproc imageAlphaToWhite:image];
newimage =[imageproc CutPartOfImage:newimage mainimage:self.imageView.image offX:point.x - width/2.0 offY:point.y - hight/2.0 Size:size];
return newimage;
}
}

@end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值