关于图片的等比缩放,从相机和照片选取头像,显示圆形头像

话不多说,应该都是大家经常使用的功能,就总结了下,分享给朋友们,希望多提宝贵意见

1.通过相机和从相片中选择设置头像

//MARK:通过相机和从相片中选择设置头像

    //弹出提示框,选择获取头像的方式

    //从相册获取图片

- (void)takePictureClick:(UIButton *)sender

    {

        //    /*注:使用,需要实现以下协议:UIImagePickerControllerDelegate,

        //     UINavigationControllerDelegate

        //     */

        //    UIImagePickerController *picker = [[UIImagePickerController alloc]init];

        //    //设置图片源(相簿)

        //    picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;

        //    //设置代理

        //    picker.delegate = self;

        //    //设置可以编辑

        //    picker.allowsEditing = YES;

        //    //打开拾取器界面

        //    [self presentViewController:picker animated:YES completion:nil];

        UIActionSheet* actionSheet = [[UIActionSheetalloc]

                                      initWithTitle:@"请选择文件来源"

                                      delegate:self

                                      cancelButtonTitle:@"取消"

                                      destructiveButtonTitle:nil

                                      otherButtonTitles:@"照相机",@"摄像机",@"本地相簿",@"本地视频",nil];

        [actionSheet showInView:self.view];

        

    }


#pragma 点击按钮选择选取图片的方法

    - (void)actionclickedButtonAtIndex:(NSInteger)buttonIndex

    {

        NSLog(@"buttonIndex = [%ld]",(long)buttonIndex);

        switch (buttonIndex) {

            case0://照相机

            {

                UIImagePickerController *imagePicker = [[UIImagePickerControlleralloc] init];

                imagePicker.delegate =self;

                imagePicker.allowsEditing =YES;

                imagePicker.sourceType =UIImagePickerControllerSourceTypeCamera;

                //            [self presentModalViewController:imagePicker animated:YES];

                [selfpresentViewController:imagePickeranimated:YEScompletion:nil];

            }

                break;

            case1://摄像机

            {

                UIImagePickerController *imagePicker = [[UIImagePickerControlleralloc] init];

                imagePicker.delegate =self;

                imagePicker.allowsEditing =YES;

                imagePicker.sourceType =UIImagePickerControllerSourceTypeCamera;

                imagePicker.videoQuality =UIImagePickerControllerQualityTypeLow;

                //            [self presentModalViewController:imagePicker animated:YES];

                [selfpresentViewController:imagePickeranimated:YEScompletion:nil];

            }

                break;

            case2://本地相簿

            {

                UIImagePickerController *imagePicker = [[UIImagePickerControlleralloc] init];

                imagePicker.delegate =self;

                imagePicker.allowsEditing =YES;

                imagePicker.sourceType =UIImagePickerControllerSourceTypePhotoLibrary;

                //            [self presentModalViewController:imagePicker animated:YES];

                [selfpresentViewController:imagePickeranimated:YEScompletion:nil];

            }

                break;

            case3://本地视频

            {

                UIImagePickerController *imagePicker = [[UIImagePickerControlleralloc] init];

                imagePicker.delegate =self;

                imagePicker.allowsEditing =YES;

                imagePicker.sourceType =UIImagePickerControllerSourceTypePhotoLibrary;

                //            [self presentModalViewController:imagePicker animated:YES];

                [selfpresentViewController:imagePickeranimated:YEScompletion:nil];

            }

                break;

            default:

                break;

        }

    }

#pragma mark -

#pragma UIImagePickerController Delegate方法

    - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info

    {

        if ([[info objectForKey:UIImagePickerControllerMediaType] isEqualToString:(__bridge NSString *)kTTypeImage]) {

            UIImage *img = [infoobjectForKey:UIImagePickerControllerEditedImage];

            [selfperformSelector:@selector(saveImage:) withObject:img afterDelay:0.5];

        }

        elseif ([[info objectForKey:UIImagePickerControllerMediaType] isEqualToString:(__bridge NSString *)kUTTypeMovie]) {

            NSString *videoPath = [[infoobjectForKey:UIImagePickerControllerMediaURL]path];

            self.fileData = [NSData dataWithContentsOfFile:videoPath];

        }

        //    [picker dismissModalViewControllerAnimated:YES];

        [picker dismissViewControllerAnimated:YEScompletion:nil];

    }

    - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker

    {

        //    [picker dismissModalViewControllerAnimated:YES];

        [picker dismissViewControllerAnimated:YEScompletion:nil];

    }

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

        //    NSLog(@"保存头像!");

        //    [userPhotoButton setImage:image forState:UIControlStateNormal];

        BOOL success;

        NSFileManager *fileManager = [NSFileManagerdefaultManager];

        NSError *error;

        

        NSArray *paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);

        NSString *documentsDirectory = [pathsobjectAtIndex:0];

        NSString *imageFilePath = [documentsDirectorystringByAppendingPathComponent:@"selfPhoto.jpg"];

        NSLog(@"imageFile->>%@",imageFilePath);

        success = [fileManager fileExistsAtPath:imageFilePath];

        if(success) {

            success = [fileManager removeItemAtPath:imageFilePatherror:&error];

        }

        //    UIImage *smallImage=[self scaleFromImage:image toSize:CGSizeMake(80.0f, 80.0f)];//将图片尺寸改为80*80

        UIImage *smallImage = [selfthumbnailWithImageWithoutScale:imagesize:CGSizeMake(93,93)];

        [UIImageJPEGRepresentation(smallImage,1.0f) writeToFile:imageFilePathatomically:YES];//写入文件

        UIImage *selfPhoto = [UIImageimageWithContentsOfFile:imageFilePath];//读取图片文件

        //    [userPhotoButton setImage:selfPhoto forState:UIControlStateNormal];

        self.imv.image = selfPhoto;

    }

    // 改变图像的尺寸,方便上传服务器

    - (UIImage *) scaleFromImage: (UIImage *) image toSize: (CGSize) size

    {

        UIGraphicsBeginImageContext(size);

        [image drawInRect:CGRectMake(0,0, size.width, size.height)];

        UIImage *newImage =UIGraphicsGetImageFromCurrentImageContext();

        UIGraphicsEndImageContext();

        return newImage;

    }

//MARK: 2.保持原始图片的长宽比,生成需要尺寸的图片

    //2.保持原来的长宽比,生成一个缩略图

    - (UIImage *)thumbnailWithImageWithoutScale:(UIImage *)image size:(CGSize)asize

    {

        UIImage *newimage;

        if (nil == image) {

            newimage = nil;

        }

        else{

            CGSize oldsize = image.size;

            CGRect rect;

            if (asize.width/asize.height > oldsize.width/oldsize.height) {

                rect.size.width = asize.height*oldsize.width/oldsize.height;

                rect.size.height = asize.height;

                rect.origin.x = (asize.width - rect.size.width)/2;

                rect.origin.y =0;

            }

            else{

                rect.size.width = asize.width;

                rect.size.height = asize.width*oldsize.height/oldsize.width;

                rect.origin.x =0;

                rect.origin.y = (asize.height - rect.size.height)/2;

            }

            UIGraphicsBeginImageContext(asize);

            CGContextRef context =UIGraphicsGetCurrentContext();

            CGContextSetFillColorWithColor(context, [[UIColorclearColor] CGColor]);

            UIRectFill(CGRectMake(0,0, asize.width, asize.height));//clear background

            [image drawInRect:rect];

            newimage = UIGraphicsGetImageFromCurrentImageContext();

            UIGraphicsEndImageContext();

        }

        return newimage;

    }



//MARK:3.显示圆形头像

- (void)showRound{

    NSArray *paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);

    NSString *documentsDirectory = [pathsobjectAtIndex:0];

    NSString *imageFilePath = [documentsDirectorystringByAppendingPathComponent:@"selfPhoto.jpg"];

    NSLog(@"imageFile->>%@",imageFilePath);

    UIImage *selfPhoto = [UIImageimageWithContentsOfFile:imageFilePath];

    self.imv.image = selfPhoto;

    [self.imv.layersetCornerRadius:CGRectGetHeight([self.imvbounds]) / 2]; //修改半径,实现头像的圆形化

    self.imv.layer.masksToBounds = YES;

    

}

你可能感兴趣的:(ios,图片等比缩放,从相机和照片选去头像,显示圆形头像,修改图片尺寸)