//系统相册,我工作中用到的也就是,选着图片上传.
//下载图片为用户保存到相册
/**
* 上传图片事件
*
* @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];
}
补充上面①:
相片的存储是单线程的,也就说在一张图片还没有存储完成的时候你在存在下一张,就能打印到 "写入正忙" 的错误
所以,多张图片一次存储我推荐用递归方法来写,一张存储完成 调用存储方法!保证图片的存储完整性