OC_UIImagePicker_系统相册

//系统相册,我工作中用到的也就是,选着图片上传.
//下载图片为用户保存到相册

/**
 *  上传图片事件
 *
 *  @param index
 */
-(void)oneMenuTouch:(int)index{
    //这是我项目中一段用户头像上传 的代码片段
    UIActionSheet *sheetV = [[UIActionSheet alloc]initWithTitle:nil
                                                       delegate:self
                                              cancelButtonTitle:@"取消"
                                         destructiveButtonTitle:@"拍照"
                                              otherButtonTitles:@"从手机相册选择", nil];
    sheetV.tintColor      = [UIColor whiteColor];
    [sheetV showInView:self.view];
}

#pragma mark ---- UIActionSheet delegate
static const NSInteger kUpLoadImageDataMaxSize             = 500*1024;

-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
    switch (buttonIndex)
    {
        case 0:
        case 1:{

            UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];//实例化一个相册对象
            imagePicker.delegate                 = self;//实现相册的代理
            imagePicker.allowsEditing            = YES;//这是设置 选取图片后有没有编辑框

            if (buttonIndex == 0)
            {//这里的if elseIF 判断一下去数据的源头是否可以工作,如有没有相机   进而设置sourceType 的属相值打开相册 或者拍照

                //拍照
                if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
                {
            imagePicker.sourceType               = UIImagePickerControllerSourceTypeCamera;
                }

            }
            else if (buttonIndex == 1)
            {
                //从手机相册选择
                if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
                {
            imagePicker.sourceType               = UIImagePickerControllerSourceTypePhotoLibrary;
                }
            }

            [self presentViewController:imagePicker animated:YES completion:nil];
        }
            break;

        default:
            break;
    }
}

#pragma mark UIImagePickerController delegate

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo: (NSDictionary *) info
{
//拿到 图片数据后就会回到这个代理 ,info中存储这我们想要的数据,根据key进行取值
    UIImage *originalImage, *editedImage, *imageToSave;
    
    editedImage   = (UIImage *) [info objectForKey:
                                 UIImagePickerControllerEditedImage];   //被框编辑后的图片
    
    originalImage = (UIImage *) [info objectForKey:
                                 UIImagePickerControllerOriginalImage]; //原始图片,未做改动
    
    imageToSave   = editedImage!=nil?editedImage:originalImage;
    
    UIImageWriteToSavedPhotosAlbum (imageToSave, nil, nil , nil);       //oSavedPhotosAlbum 会将图片存进相册 ①
    
    [self dismissViewControllerAnimated:YES completion:nil];            //图片相关的事件处理完成
    
    NSData   *imageData     = UIImagePNGRepresentation(imageToSave);    //得到一个 png的图像Data 用作上传 或者等等
    NSInteger imageDataSize = imageData.length;
    
    if (imageDataSize > kUpLoadImageDataMaxSize) {
        
        imageData = UIImageJPEGRepresentation(imageToSave, kUpLoadImageDataMaxSize/imageDataSize);
    }
    
//    [self requestPostGoodImage:imageData];                            //上传图片
}

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{
    //图片取值操作完成后 回到这个代理 将图片操作视图dissmis
    [picker dismissViewControllerAnimated:YES completion:nil];
}

补充上面①:

相片的存储是单线程的,也就说在一张图片还没有存储完成的时候你在存在下一张,就能打印到 "写入正忙" 的错误

所以,多张图片一次存储我推荐用递归方法来写,一张存储完成 调用存储方法!保证图片的存储完整性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值