美文网首页傲视苍穹iOS《Objective-C》VIP专题
弹出操作表从相册或拍照中获取图片信息,并压缩保存到本地,最后上传

弹出操作表从相册或拍照中获取图片信息,并压缩保存到本地,最后上传

作者: lgh_ios | 来源:发表于2016-06-16 14:23 被阅读301次

注意事项:公司后台发送请求后,得到的错误结果是JSON text did not start with array or object and option to allow fragments not set;

这是因为 AFNetworking默认把响应结果当成json来处理,(默认manager.responseSerializer = [AFJSONResponseSerializer serializer]) ,很显然,我们请求的百度首页 返回的并不是一个json文本,而是一个html网页,但是AFNetworking并不知道,它坚信请求的结果就是一个json文本!然后固执地以json的形式去解析,显然没办法把一个网页解析成一个字典或者数组,所以产生了上述错误.

然而,我们期望它能够正确地处理这个情形,而不是提示一个错误.

这时候 你必须告诉AFNetworking:别把这个网页当json来处理!

只需要在发送请求前加入:manager.responseSerializer = [AFHTTPResponseSerializer serializer];


主要代码如下:

@interfaceMeTableViewController()

UIImagePickerControllerDelegate,

UINavigationControllerDelegate,UITabBarControllerDelegate>

/**

*我的头像

*/

@property(weak,nonatomic)IBOutletUIImageView*myImageView;

@property(nonatomic,strong)UIAlertController* alertController;

@property(nonatomic,strong)UIAlertAction* cancelAction;

@property(nonatomic,strong)UIAlertAction* cameraAction;

@property(nonatomic,strong)UIAlertAction* albumAction;

@property(nonatomic,strong)KUserInfo* userInfo;

@property(nonatomic,strong)NSString* token;

@property(nonatomic,assign)NSIntegerselectedIndex;

/**

*我的爱心币

*/

@property(weak,nonatomic)IBOutletUILabel*myLoveMoneyLabel;

/**

*我的昵称

*/

@property(weak,nonatomic)IBOutletUILabel*myUserNameLabel;

/**

*我的捐款总额

*/

@property(weak,nonatomic)IBOutletUIButton*launchBtn;

@property(weak,nonatomic)IBOutletUIButton*donateBtn;

@property(weak,nonatomic)IBOutletUILabel*myDonateTotalLabel;

@property(nonatomic,strong)NSIndexPath* indexPath;

@property(nonatomic,strong)NSString* filePath;

@end

@implementationMeTableViewController

#pragma mark-----------懒加载

- (UIAlertController*)alertController

{

if(!_alertController) {

_alertController= [UIAlertControlleralertControllerWithTitle:@"请选择"message:@"获取照片的来源"preferredStyle:UIAlertControllerStyleActionSheet];

[_alertControlleraddAction:self.cancelAction];

[_alertControlleraddAction:self.cameraAction];

[_alertControlleraddAction:self.albumAction];

}

return_alertController;

}

- (UIAlertAction*)cancelAction

{

if(!_cancelAction) {

_cancelAction= [UIAlertActionactionWithTitle:@"取消"style:UIAlertActionStyleCancelhandler:^(UIAlertAction*_Nonnullaction) {

[selfdismissViewControllerAnimated:YEScompletion:nil];

}];

}

return_cancelAction;

}

- (UIAlertAction*)cameraAction

{

if(!_cameraAction) {

_cameraAction= [UIAlertActionactionWithTitle:@"照相机"style:UIAlertActionStyleDestructivehandler:^(UIAlertAction*_Nonnullaction) {

if([UIImagePickerControllerisSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {

UIImagePickerController*pc = [[UIImagePickerControlleralloc]init];

pc.allowsEditing=YES;

pc.sourceType=UIImagePickerControllerCameraCaptureModeVideo;

pc.delegate=self;

[selfpresentViewController:pcanimated:YEScompletion:nil];

}

}];

}

return_cameraAction;

}

- (UIAlertAction*)albumAction

{

if(!_albumAction) {

_albumAction= [UIAlertActionactionWithTitle:@"相册"style:UIAlertActionStyleDefaulthandler:^(UIAlertAction*_Nonnullaction) {

UIImagePickerController*pc = [[UIImagePickerControlleralloc]init];

pc.allowsEditing=YES;

pc.sourceType=UIImagePickerControllerSourceTypePhotoLibrary;

pc.delegate=self;

[selfpresentViewController:pcanimated:YEScompletion:nil];

}];

}

return_albumAction;

}

- (KUserInfo*)userInfo

{

if(!_userInfo) {

_userInfo= [KUserInfosharedUserInfo];

}

return_userInfo;

}


#pragma mark----------------------------------------------------viewDidLoad

- (void)viewDidLoad {

[superviewDidLoad];

if(self.userInfo.avator) {

[self.myImageViewsetImageWithURL:[NSURLURLWithString:self.userInfo.avator]];

}else{

//默认头像

}

}

//添加图片圆角并加tap手势

- (void)setUpImageView{

[self.myImageViewsetRoundLayer];

[self.myImageViewaddGestureRecognizer:[[UITapGestureRecognizeralloc]initWithTarget:selfaction:@selector(headImageTap)] ];

}

/*图片tap方法的处理,跳转到alertController*/

- (void) headImageTap

{

[selfpresentViewController:self.alertControlleranimated:YEScompletion:nil];

}

#pragma mark----------UIImagePickerControllerDelegate

/**选择图片的处理*/

- (void)imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{

UIImage*image = info[UIImagePickerControllerEditedImage];

self.myImageView.image= image;

//保存到沙盒

[selfsaveImage:imageWithName:@"avator"];

[self dismissViewControllerAnimated:YEScompletion:nil];

}

//保存图片

- (void)saveImage:(UIImage*)tempImage WithName:(NSString*)imageName

{

UIImage*imageNew = tempImage;

//设置image的尺寸(可以自己制定)

CGSizeimagesize = imageNew.size;

imagesize.height=626;

imagesize.width=413;

//对图片大小进行压缩--

imageNew = [selfimageWithImage:imageNewscaledToSize:imagesize];

NSData*imageData =UIImageJPEGRepresentation(imageNew,0.00001);

//return image to png

// NSData* imageData = UIImagePNGRepresentation(tempImage);

NSString* documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)objectAtIndex:0];

NSString* totalPath = [documentPathstringByAppendingPathComponent:imageName];

self.filePath= totalPath;

//保存到document

[imageDatawriteToFile:totalPathatomically:NO];

//保存到NSUserDefaults

NSUserDefaults*userDefaults = [NSUserDefaultsstandardUserDefaults];

[userDefaultssetObject:totalPathforKey:@"avatar"];

//上传服务器

NSLog(@"图片文件地址:%@",self.filePath);

dispatch_async(dispatch_get_global_queue(0,0), ^{

NSLog(@"3%@",[NSThreadcurrentThread]);

[selfsendChangeUserAvatorRequest];

});

}

//对图片尺寸进行压缩--(压缩前3.2M,压缩后为16K)

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

[imagedrawInRect: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;

}

#pragma mark--------------发送更换用户头像的请求(自己对AFNetworking重新进行封装)kCHANGEAVATORSTR是.pch中声明的各种参数

- (void)sendChangeUserAvatorRequest

{

[AFHTTPSessionManagerGET:kCHANGEAVATORSTR parameters:nilcompletionHandle:^(idmodel,NSError*error){

if(!error) {

[selfshowAlert:@"头像修改成功"];

}else{

NSLog(@"error:%@",error.userInfo);

[selfshowAlert:@"头像修改失败"];

}

}];

}

@end

主要用于个人记录,供参考!!!!!!!

相关文章

网友评论

    本文标题:弹出操作表从相册或拍照中获取图片信息,并压缩保存到本地,最后上传

    本文链接:https://www.haomeiwen.com/subject/absgkttx.html