iOS 从相机或相册获取图片并裁剪
来源:互联网 发布:长图制作软件 编辑:程序博客网 时间:2024/05/16 14:50
今天遇到一个用户头像上传的问题,需要从相册或者相机中读取图片。代码很简单,抽取关键部分,如下:
//load user image- (void)UesrImageClicked{ UIActionSheet *sheet; // 判断是否支持相机 if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { sheet = [[UIActionSheet alloc] initWithTitle:@"选择图像" delegate:self cancelButtonTitle:nil destructiveButtonTitle:@"取消" otherButtonTitles:@"拍照", @"从相册选择", nil]; } else { sheet = [[UIActionSheet alloc] initWithTitle:@"选择图像" delegate:self cancelButtonTitle:nil destructiveButtonTitle:@"取消" otherButtonTitles:@"从相册选择", nil]; } sheet.tag = 255; [sheet showInView:self.view];}#pragma mark - action sheet delegte- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{ if (actionSheet.tag == 255) { NSUInteger sourceType = UIImagePickerControllerSourceTypePhotoLibrary; // 判断是否支持相机 if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { switch (buttonIndex) { case 0: return; case 1: //相机 sourceType = UIImagePickerControllerSourceTypeCamera; break; case 2: //相册 sourceType = UIImagePickerControllerSourceTypePhotoLibrary; break; } } else { if (buttonIndex == 0) { return; } else { sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; } } // 跳转到相机或相册页面 UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init]; imagePickerController.delegate = self; imagePickerController.allowsEditing = YES; imagePickerController.sourceType = sourceType; [self presentViewController:imagePickerController animated:YES completion:^{}]; }}#pragma mark - image picker delegte- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{[picker dismissViewControllerAnimated:YES completion:^{}]; UIImage *image = [info UIImagePickerControllerOriginalImage]; userImageView.image = image; NSData *imageData = UIImageJPEGRepresentation(image, COMPRESSED_RATE); UIImage *compressedImage = [UIImage imageWithData:imageData]; [HttpRequestManager uploadImage:compressedImage httpClient:self.httpClient delegate:self]; }
创建一张表单,选择相机或者相册,然后用回调函数处理返回的图片。
但是返回的图像并不是正方形,显示在用户头像的View里面产生明显的拉伸。研究了很久各种裁剪算法,甚至想创建一个view来处理。突然发现代码中从相机、相册获取图片时采用的的
UIImagePickerControllerOriginalImage
于是跟踪进去一看:
UIKIT_EXTERNNSString *const UIImagePickerControllerMediaType; // an NSString (UTI, i.e. kUTTypeImage)
UIKIT_EXTERNNSString *const UIImagePickerControllerOriginalImage; // a UIImage
UIKIT_EXTERNNSString *const UIImagePickerControllerEditedImage; // a UIImage
UIKIT_EXTERNNSString *const UIImagePickerControllerCropRect; // an NSValue (CGRect)
UIKIT_EXTERNNSString *const UIImagePickerControllerMediaURL; // an NSURL
UIKIT_EXTERN NSString *const UIImagePickerControllerReferenceURL NS_AVAILABLE_IOS(4_1); // an NSURL that references an
恍然大悟,很简单,用UIImagePickerControllerEditedImage,万事搞定。
- iOS 从相机或相册获取图片并裁剪
- iOS 从相机或相册获取图片并裁剪
- iOS 从相机或相册获取图片并裁剪
- iOS从相机或相册获取图片并裁剪,再获取裁剪后的图片
- Android 从相机或相册获取图片并裁剪
- iOS开发 使用UIImagePicker从相机或相册获取图片并裁剪
- [IOS]从相册或相机获取图片
- Android选择图片(从相册或相机)并裁剪
- Android从相机或相册获取图片裁剪
- iOS 调用相机 ,相册获取图片 并裁剪为正方形
- iOS 相机拍照、相册获取照片(仿微信) 一一 从相册获取图片、图片裁剪
- Android 从相机或相册获取图片并剪切
- [IOS]iphone从相册或相机获取图片
- 从相机或相册获取照片并进行裁剪(网上代码整理)
- 从相机或相册获取照片并进行裁剪(网上代码整理)
- 从相机、相册获取照片或图片
- Android 从相机或相册获取图片
- 从相机相册获取图片裁剪后用于评论晒图或更换背景图
- dom4j解析xml
- ANDROID OptionMenu 菜单列表
- PHP 获取本年、本周、本月、本日的开始和结束时间
- github常用指令
- Struts2+Jquery实现ajax并返回json类型数据
- iOS 从相机或相册获取图片并裁剪
- 自建企业邮箱如何设置A/MX记录?
- UVaOJ128 - Software CRC
- 开发板发展漫谈
- java专区:QQ群 110662695 欢迎大家交流
- eclipse 远程调试linux下 tomcat 项目
- BZOJ 3172([Tjoi2013]单词-后缀数组第一题+RMQ)
- hibernate_Restrictions用法
- 关于kaggle上的digit recognizer