iOS图片上传及处理

来源:互联网 发布:安安软件 编辑:程序博客网 时间:2024/04/28 18:27

从摄像头或者是从相册中读取图片,需要通过UIImagePickerController类来实现,在使用UIImagePickerController时,需要是实现下面两个协议

<UINavigationControllerDelegate,UIImagePickerControllerDelegate>


1、从相册中读取图片

首先要实例化UIImagePickerController对象imagePicker,设置imagePicker的图片来源为UIImagePickerControllerSourceTypePhotoLibrary,表明当前图片的来源为用户的相册。以及设置图片是否可被编辑allowsEditing。

#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、从相册中读取图片

#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];}

在用户现则好图片后,会回调选择结束的方法

-(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 ;    }}

对图片进行压缩

-(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.   return newImage;}

将图片保存到Documents目录及PNG、JPEG格式相互转换

- (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二进制存储

 image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];NSData *data;        if (UIImagePNGRepresentation(image) == nil) {            data = UIImageJPEGRepresentation(image, 1);        } else {            data = UIImagePNGRepresentation(image);        }
[fileManager createFileAtPath:[filePath stringByAppendingString:@"/image.png"] contents:data attributes:nil];  //将图片保存为PNG格式 [fileManager createFileAtPath:[filePath stringByAppendingString:@"/image.jpg"] contents:data attributes:nil]; //将图片保存为JPEG格式

【参考资料:http://www.open-open.com/】

2 0
原创粉丝点击