博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS 从相机或相册获取图片并裁剪
阅读量:6068 次
发布时间:2019-06-20

本文共 3243 字,大约阅读时间需要 10 分钟。

今天遇到一个用户头像上传的问题,需要从相册或者相机中读取图片。代码很简单,抽取关键部分,如下:

 

//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_EXTERN NSString *const UIImagePickerControllerMediaType;      // an NSString (UTI, i.e. kUTTypeImage)

UIKIT_EXTERN NSString *const UIImagePickerControllerOriginalImage;  // a UIImage

UIKIT_EXTERN NSString *const UIImagePickerControllerEditedImage;    // a UIImage

UIKIT_EXTERN NSString *const UIImagePickerControllerCropRect;       // an NSValue (CGRect)

UIKIT_EXTERN NSString *const UIImagePickerControllerMediaURL;       // an NSURL

UIKIT_EXTERN NSString *const UIImagePickerControllerReferenceURL        NS_AVAILABLE_IOS(4_1);  // an NSURL that references an 

 

恍然大悟,很简单,用UIImagePickerControllerEditedImage,万事搞定。

转载地址:http://noygx.baihongyu.com/

你可能感兴趣的文章
基于智能家居场景的POALRDB性能体验
查看>>
Cris 的 Scala 笔记整理(九):面向对象高级
查看>>
chrome devtools使用详解——Elements篇
查看>>
mongodb明明认证成功 解决不能关闭的方法
查看>>
面试——谈谈你对Java 面向对象思想的理解
查看>>
在webpack-dev-server内添加mock server
查看>>
关于生成订单号规则的一些思考
查看>>
无人餐厅喜忧参半,要成还得看“暖科技”?
查看>>
盒马鲜生To C,美菜网To B:生鲜独角兽的不同成长之路
查看>>
Qtum智能合约使用方法及说明
查看>>
即时性消费时代来临,美团闪购如何竞合29万亿级市场?
查看>>
iOS 锁
查看>>
java基础:String — 源码分析(一)
查看>>
Python PyCharm编辑器配置和使用
查看>>
adb通信协议分析以及实现(四):adb shell 命令分析
查看>>
在微信小程序里自动获得当前手机所在的经纬度并转换成地址
查看>>
input,select, v-model 绑定的值为数字类型
查看>>
Vuex简单入门
查看>>
深入理解webpack打包机制(一)
查看>>
基于ffmpeg+nginx+UscreenCapture的局域网直播系统搭建
查看>>