从摄像头或者是从相册中读取图片,需要通过UIImagePickerController类来实现,在使用UIImagePickerController时,需要是实现下面两个协议
| 1 | <uinavigationcontrollerdelegate,uiimagepickercontrollerdelegate></uinavigationcontrollerdelegate,uiimagepickercontrollerdelegate> | 
1、从相册中读取图片
首先要实例化UIImagePickerController对象imagePicker,设置imagePicker的图片来源为UIImagePickerControllerSourceTypePhotoLibrary,表明当前图片的来源为用户的相册。以及设置图片是否可被编辑allowsEditing。
| 1 2 3 4 5 6 7 8 9 10 11 | #pragma mark - 从用户相册获取图片- (void)pickImageFromAlbum{    imagePicker = [[UIImagePickerController alloc] init];    imagePicker.delegate =self;    imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;    imagePicker.modalTransitionStyle = UIModalTransitionStyleCoverVertical;    imagePicker.allowsEditing =YES;        [self presentModalViewController:imagePicker animated:YES];} | 
2、从相册中读取图片
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #pragma mark - 从摄像头获取图片- (void)pickImageFromCamera{    imagePicker = [[UIImagePickerController alloc] init];    imagePicker.delegate =self;    imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;    imagePicker.modalTransitionStyle = UIModalTransitionStyleCoverVertical;    imagePicker.allowsEditing =YES;        [self presentModalViewController:imagePicker animated:YES];}//打开相机- (IBAction)touch_photo:(id)sender {    // for iphone    UIImagePickerController *pickerImage = [[UIImagePickerController alloc] init];   if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {        pickerImage.sourceType = UIImagePickerControllerSourceTypeCamera;        pickerImage.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:pickerImage.sourceType];            }    pickerImage.delegate =self;    pickerImage.allowsEditing =YES;//自定义照片样式    [self presentViewController:pickerImage animated:YES completion:nil];} | 
在用户现则好图片后,会回调选择结束的方法
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | -(void)imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary*)info{    //初始化imageNew为从相机中获得的--    UIImage *imageNew = [info objectForKey:@UIImagePickerControllerOriginalImage];    //设置image的尺寸    CGSize imagesize = imageNew.size;    imageSize.height =626;    imageSize.width =413;    //对图片大小进行压缩--    imageNew = [self imageWithImage:imageNew scaledToSize:imageSize];    NSData *imageData = UIImageJPEGRepresentation(imageNew,0.00001);   if(m_selectImage==nil)    {        m_selectImage = [UIImage imageWithData:imageData];        NSLog(@m_selectImage:%@,m_selectImage);        [self.takePhotoButton setImage:m_selectImage forState:UIControlStateNormal];        [picker dismissModalViewControllerAnimated:YES];       return;    }} | 
对图片进行压缩
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | -(UIImage*)imageWithImage:(UIImage*)image scaledToSize:(CGSize)newSize{    // Create a graphics image context    UIGraphicsBeginImageContext(newSize);        // Tell the old image to draw in this new context, with the desired    // new size    [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];        // Get the new image from the context    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();        // End the context    UIGraphicsEndImageContext();        // Return the new image.   returnnewImage;} | 
将图片保存到Documents目录及PNG、JPEG格式相互转换
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary*)info {    NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];    if([mediaType isEqualToString:@public.image]){        image = [info objectForKey:@UIImagePickerControllerOriginalImage];        NSData *data;        if(UIImagePNGRepresentation(image) == nil) {            data = UIImageJPEGRepresentation(image, 1);        } else{            data = UIImagePNGRepresentation(image);        }                NSFileManager *fileManager = [NSFileManager defaultManager];        NSString *filePath = [NSString stringWithString:[self getPath:@image1]];         //将图片存储到本地documents         [fileManager createDirectoryAtPath:filePath withIntermediateDirectories:YES attributes:nil error:nil];         [fileManager createFileAtPath:[filePath stringByAppendingString:@/image.png] contents:dataAttributes:nil];                UIImage *editedImage = [[UIImage alloc] init];        editedImage = image;        CGRect rect = CGRectMake(0, 0, 64, 96);        UIGraphicsBeginImageContext(rect.size);        [editedImage drawInRect:rect];        editedImage = UIGraphicsGetImageFromCurrentImageContext();                UIButton *imageButton = [UIButton buttonWithType:UIButtonTypeCustom];        imageButton.frame = CGRectMake(10, 10, 64, 96);        [imageButton setImage:editedImage forState:UIControlStateNormal];        [self.view addSubview:imageButton];        [imageButton addTarget:self action:@selector(imageAction:)forControlEvents:UIControlEventTouchUpInside];        [self dismissModalViewControllerAnimated:YES];    } else{        NSLog(@Media);    } | 
在上面的方法中不能得到图片的名称及格式,所以需要将其转换成NSData二进制存储
| 1 2 3 4 5 6 7 | image = [info objectForKey:@UIImagePickerControllerOriginalImage];NSData *data;        if(UIImagePNGRepresentation(image) == nil) {            data = UIImageJPEGRepresentation(image, 1);        } else{            data = UIImagePNGRepresentation(image);        } | 
| 1 2 | [fileManager createFileAtPath:[filePath stringByAppendingString:@/image.png] contents:data attributes:nil];  //将图片保存为PNG格式 [fileManager createFileAtPath:[filePath stringByAppendingString:@/image.jpg | 
原文:http://www.cnblogs.com/LiLihongqiang/p/5597371.html