iOS图片上传及处理
2017-08-06 15:42
344 查看
从摄像头或者是从相冊中读取图片。须要通过UIImagePickerController类来实现,在使用UIImagePickerController时,须要是实现以下两个协议
1、从相冊中读取图片
首先要实例化UIImagePickerController对象imagePicker。设置imagePicker的图片来源为UIImagePickerControllerSourceTypePhotoLibrary,表明当前图片的来源为用户的相冊。
以及设置图片是否可被编辑allowsEditing。
2、从相冊中读取图片
在用户现则好图片后。会回调选择结束的方法
对图片进行压缩
将图片保存到Documents文件夹及PNG、JPEG格式相互转换
在上面的方法中不能得到图片的名称及格式。所以须要将其转换成NSData二进制存储
【參考资料:http://www.open-open.com/】
<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/】
相关文章推荐
- iOS基础8:自定义MyData/自定义SQLite用于网络判断,版本判断,图片缓存处理,下载或者上传的GET或POST请求,加密手段,.数据解析
- iOS - 图片上传处理 图片压缩 图片处理
- IOS 图片上传处理 图片压缩 图片处理
- iOS文件处理,将图片存到手机目录里面 创建文件夹,NSFileManager用来存储图片,然后遍历将图片取出上传到服务器哦!!
- IOS 图片上传处理 图片压缩 图片处理
- IOS 图片上传处理 图片压缩 图片处理
- IOS 图片上传处理 图片压缩 图片处理
- IOS 图片上传处理 图片压缩 图片处理
- IOS应用开发-图片处理(拉伸图片 创建缩略图 解决图片旋转的问题 图片编码及上传 将图片写入磁盘)
- iOS开发关于上传图片后,图片发生旋转的处理
- IOS 图片上传处理 图片压缩 图片处理
- IOS 图片上传处理 图片压缩 图片处理
- iOS开发中的一些图片上传压缩处理
- iOS 之图片上传处理
- iOS多张图片上传多线程处理方法(可获取最后一张上传状态后的信号)
- IOS 图片上传处理 图片压缩 图片处理
- IOS 图片上传处理 图片压缩 图片处理
- PHP POST接收处理 IOS上传NSData图片数据,上传图片到服务器
- IOS 图片上传处理 图片压缩 图片处理
- 微信页面上传图片,安卓和ios上传接口的兼容处理