亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS 圖片上傳使用base64或者二進制流上傳頭像功能

2020-07-26 02:40:39
字體:
來源:轉載
供稿:網友

我們在寫代碼的時候經常會將頭像進行上傳服務器,上傳頭像圖片我試過兩種方式

一種方式就是使用base64字符串上傳圖片,這種形式我個人認為比較適合上傳圖片數量比較少的,比如上傳頭像,上傳圖片數量多的話,速度會慢些

另一種方式是使用二進制流進行上傳圖片,這種方式上傳圖片少或者數量多都沒關系,速度也很快

demo地址:http://download.csdn.net/detail/tuwanli125/9340205

demo地址:  https://github.com/tuwanli/PictureHead

選擇頭像效果:

程序如下:

ViewController.h

#import <UIKit/UIKit.h>@interface ViewController : UIViewController@property (weak, nonatomic) IBOutletUIImageView *headIcon;- (IBAction)changeIconAction:(UITapGestureRecognizer *)sender;@end

ViewController.m

#import "ViewController.h"#import "AFHTTPRequestOperationManager.h"@interface ViewController ()<UIImagePickerControllerDelegate,UINavigationControllerDelegate,UIActionSheetDelegate>{ UIImagePickerController *pickerController; AFHTTPRequestOperationManager *manager;}@end@implementation ViewController- (void)viewDidLoad { [superviewDidLoad]; //初始化頭像控件 [selfinitHeadIcon]; //初始化pickController [selfcreateData];}- (void)initHeadIcon{ self.view.backgroundColor = [UIColorlightGrayColor]; self.headIcon.layer.cornerRadius = self.headIcon.frame.size.height/2; self.headIcon.clipsToBounds =YES; self.headIcon.layer.borderColor = [UIColor whiteColor].CGColor; self.headIcon.layer.borderWidth = 3;}- (void)createData{ //初始化pickerController pickerController = [[UIImagePickerControlleralloc]init]; pickerController.view.backgroundColor = [UIColororangeColor]; pickerController.delegate =self; pickerController.allowsEditing =YES;}- (IBAction)changeIconAction:(UITapGestureRecognizer *)sender { UIActionSheet *actionSheet = [[UIActionSheetalloc]initWithTitle:@"選擇頭像"delegate:selfcancelButtonTitle:@"取消"destructiveButtonTitle:nilotherButtonTitles:@"拍照",@"相冊",@"圖庫",nil]; [actionSheet showInView:[UIApplicationsharedApplication].keyWindow];}- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{ if (buttonIndex ==0) {//相機  if([UIImagePickerControllerisSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])  {   NSLog(@"支持相機");   [selfmakePhoto];  }else{   UIAlertView *alert = [[UIAlertViewalloc]initWithTitle:@"提示"message:@"請在設置-->隱私-->相機,中開啟本應用的相機訪問權限!!"delegate:selfcancelButtonTitle:@"取消"otherButtonTitles:@"我知道了",nil];   [alertshow];  } }elseif (buttonIndex ==1){//相片  if([UIImagePickerControllerisSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary])  {   NSLog(@"支持相冊");   [selfchoosePicture];  }else{   UIAlertView *alert = [[UIAlertViewalloc]initWithTitle:@"提示"message:@"請在設置-->隱私-->照片,中開啟本應用的相機訪問權限??!"delegate:selfcancelButtonTitle:@"取消"otherButtonTitles:@"我知道了",nil];   [alertshow];  } }elseif (buttonIndex ==2){//圖冊  if([UIImagePickerControllerisSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum])  {   NSLog(@"支持圖庫");   [selfpictureLibrary];//   [self presentViewController:picker animated:YES completion:nil];  }else{   UIAlertView *alert = [[UIAlertViewalloc]initWithTitle:@"提示"message:@"請在設置-->隱私-->照片,中開啟本應用的相機訪問權限??!"delegate:selfcancelButtonTitle:@"取消"otherButtonTitles:@"我知道了",nil];   [alertshow];  } }elseif (buttonIndex ==3){ }}//跳轉到imagePicker里- (void)makePhoto{ pickerController.sourceType =UIImagePickerControllerSourceTypeCamera; [selfpresentViewController:pickerControlleranimated:YEScompletion:nil];}//跳轉到相冊- (void)choosePicture{ pickerController.sourceType =UIImagePickerControllerSourceTypeSavedPhotosAlbum; [selfpresentViewController:pickerControlleranimated:YEScompletion:nil];}//跳轉圖庫- (void)pictureLibrary{ pickerController.sourceType =UIImagePickerControllerSourceTypePhotoLibrary; [selfpresentViewController:pickerControlleranimated:YEScompletion:nil];}//用戶取消退出picker時候調用- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{ NSLog(@"%@",picker); [pickerControllerdismissViewControllerAnimated:YEScompletion:^{ }];}//用戶選中圖片之后的回調- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{ NSLog(@"%s,info == %@",__func__,info); UIImage *userImage = [selffixOrientation:[infoobjectForKey:@"UIImagePickerControllerOriginalImage"]]; userImage = [selfscaleImage:userImagetoScale:0.3]; //保存圖片// [self saveImage:userImage name:@"某個特定標示"]; [pickerControllerdismissViewControllerAnimated:YEScompletion:^{ }]; [self.headIconsetImage:userImage]; self.headIcon.contentMode = UIViewContentModeScaleAspectFill; self.headIcon.clipsToBounds =YES; //照片上傳 [selfupDateHeadIcon:userImage];}- (void)upDateHeadIcon:(UIImage *)photo{ //兩種方式上傳頭像 /*方式一:使用NSData數據流傳圖片*/ NSString *imageURl =@""; manager.responseSerializer = [AFHTTPResponseSerializerserializer]; manager.responseSerializer.acceptableContentTypes =[NSSetsetWithObject:@"text/html"]; [managerPOST:imageURlparameters:nilconstructingBodyWithBlock:^(id<AFMultipartFormData> formData) {  [formData appendPartWithFileData:UIImageJPEGRepresentation(photo,1.0)name:@"text"fileName:@"test.jpg"mimeType:@"image/jpg"]; }success:^(AFHTTPRequestOperation *operation,id responseObject) { }failure:^(AFHTTPRequestOperation *operation,NSError *error) { }]; /*方式二:使用Base64字符串傳圖片*/ NSData *data =UIImageJPEGRepresentation(photo,1.0); NSString *pictureDataString=[database64Encoding]; NSDictionary * dic =@{@"verbId":@"modifyUserInfo",@"deviceType":@"ios",@"userId":@"",@"photo":pictureDataString,@"mobileTel":@""}; [managerPOST:@""parameters:dic success:^(AFHTTPRequestOperation *operation,idresponseObject) {  if ([[responseObjectobjectForKey:@"flag"]intValue] == 0) {  }else{  } }   failure:^(AFHTTPRequestOperation *operation,NSError *error) {   }];}//保存照片到沙盒路徑(保存)- (void)saveImage:(UIImage *)image name:(NSString *)iconName{ NSArray *paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES); //寫入文件 NSString *icomImage = iconName; NSString *filePath = [[pathsobjectAtIndex:0]stringByAppendingPathComponent:[NSStringstringWithFormat:@"%@.png", icomImage]]; // 保存文件的名稱 // [[self getDataByImage:image] writeToFile:filePath atomically:YES]; [UIImagePNGRepresentation(image)writeToFile: filePath atomically:YES];}//縮放圖片- (UIImage *)scaleImage:(UIImage *)image toScale:(float)scaleSize{ UIGraphicsBeginImageContext(CGSizeMake(image.size.width*scaleSize,image.size.height*scaleSize)); [imagedrawInRect:CGRectMake(0,0, image.size.width * scaleSize, image.size.height *scaleSize)]; UIImage *scaledImage =UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); NSLog(@"%@",NSStringFromCGSize(scaledImage.size)); return scaledImage;}//修正照片方向(手機轉90度方向拍照)- (UIImage *)fixOrientation:(UIImage *)aImage { // No-op if the orientation is already correct if (aImage.imageOrientation ==UIImageOrientationUp)  return aImage; CGAffineTransform transform =CGAffineTransformIdentity; switch (aImage.imageOrientation) {  caseUIImageOrientationDown:  caseUIImageOrientationDownMirrored:   transform =CGAffineTransformTranslate(transform, aImage.size.width, aImage.size.height);   transform =CGAffineTransformRotate(transform,M_PI);   break;  caseUIImageOrientationLeft:  caseUIImageOrientationLeftMirrored:   transform =CGAffineTransformTranslate(transform, aImage.size.width,0);   transform =CGAffineTransformRotate(transform,M_PI_2);   break;  caseUIImageOrientationRight:  caseUIImageOrientationRightMirrored:   transform =CGAffineTransformTranslate(transform,0, aImage.size.height);   transform =CGAffineTransformRotate(transform, -M_PI_2);   break;  default:   break; } switch (aImage.imageOrientation) {  caseUIImageOrientationUpMirrored:  caseUIImageOrientationDownMirrored:   transform =CGAffineTransformTranslate(transform, aImage.size.width,0);   transform =CGAffineTransformScale(transform, -1,1);   break;  caseUIImageOrientationLeftMirrored:  caseUIImageOrientationRightMirrored:   transform =CGAffineTransformTranslate(transform, aImage.size.height,0);   transform =CGAffineTransformScale(transform, -1,1);   break;  default:   break; } // Now we draw the underlying CGImage into a new context, applying the transform // calculated above. CGContextRef ctx =CGBitmapContextCreate(NULL, aImage.size.width, aImage.size.height,           CGImageGetBitsPerComponent(aImage.CGImage),0,           CGImageGetColorSpace(aImage.CGImage),           CGImageGetBitmapInfo(aImage.CGImage)); CGContextConcatCTM(ctx, transform); switch (aImage.imageOrientation) {  caseUIImageOrientationLeft:  caseUIImageOrientationLeftMirrored:  caseUIImageOrientationRight:  caseUIImageOrientationRightMirrored:   CGContextDrawImage(ctx,CGRectMake(0,0,aImage.size.height,aImage.size.width), aImage.CGImage);   break;  default:   CGContextDrawImage(ctx,CGRectMake(0,0,aImage.size.width,aImage.size.height), aImage.CGImage);   break; } CGImageRef cgimg =CGBitmapContextCreateImage(ctx); UIImage *img = [UIImageimageWithCGImage:cgimg]; CGContextRelease(ctx); CGImageRelease(cgimg); return img;}

此demo從相冊選區圖片使用的單選圖片,如果想看多選圖片顯示在ScrollView中demo 地址:

https://github.com/tuwanli/PictureMutipleSelect

總結

以上所述是小編給大家介紹的iOS 圖片上傳使用base64或者二進制流上傳頭像功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品视频白浆免费视频| 亚洲精品欧美日韩专区| 亚洲大胆人体视频| 亚洲人免费视频| 久久久国产在线视频| 97视频免费看| 奇米影视亚洲狠狠色| 日韩乱码在线视频| 97激碰免费视频| 91日韩在线播放| 欧洲永久精品大片ww免费漫画| 一区二区三区 在线观看视| 欧美日韩中文字幕在线视频| 亚洲综合中文字幕在线| 日韩电影在线观看免费| 九九久久国产精品| 日本精品视频在线播放| 日韩电影免费观看在线| 在线观看欧美视频| 日韩欧美在线播放| 国产女精品视频网站免费| 欧美精品国产精品日韩精品| 欧美成人一区在线| 成人黄色免费网站在线观看| 日本不卡高字幕在线2019| 奇米一区二区三区四区久久| 亚洲第一页在线| 欧美另类老肥妇| 欧美日韩爱爱视频| 欧美午夜精品久久久久久浪潮| 国产精品夜色7777狼人| 亚洲最大的免费| 美女国内精品自产拍在线播放| 亚洲天堂网在线观看| 久久久久久久久爱| 亚洲精品一区久久久久久| 红桃av永久久久| 欧美乱大交xxxxx| 欧美洲成人男女午夜视频| 亚洲一区二区日本| 黑人巨大精品欧美一区二区一视频| 91黑丝高跟在线| 狠狠色香婷婷久久亚洲精品| 欧美区二区三区| 国产精品永久免费在线| 精品视频偷偷看在线观看| 91tv亚洲精品香蕉国产一区7ujn| 日韩大片免费观看视频播放| 国产成+人+综合+亚洲欧美丁香花| 精品亚洲精品福利线在观看| 亚洲人高潮女人毛茸茸| 亚洲精品视频播放| 一本色道久久88亚洲综合88| 91九色国产社区在线观看| 91视频88av| 日韩精品久久久久久久玫瑰园| 曰本色欧美视频在线| 亚洲乱码一区av黑人高潮| 91青草视频久久| 欧美高清不卡在线| 欧美精品国产精品日韩精品| 久久躁日日躁aaaaxxxx| 国产精品成人一区二区| www国产亚洲精品久久网站| 国产精品美女www| 麻豆国产精品va在线观看不卡| 国产精品999| 91精品视频播放| 久久在线免费视频| 日韩大陆欧美高清视频区| 精品亚洲一区二区三区在线播放| 全球成人中文在线| 这里只有精品视频| 九九热最新视频//这里只有精品| 国产精品老女人视频| 国模私拍视频一区| 美乳少妇欧美精品| 久久这里有精品视频| 欧美劲爆第一页| 日韩免费在线免费观看| 国产精品99久久久久久人| 午夜精品久久久久久久久久久久| 精品福利视频导航| 亚洲午夜未满十八勿入免费观看全集| 尤物九九久久国产精品的分类| 欧美国产亚洲精品久久久8v| 国产成人在线一区| 日韩乱码在线视频| 日韩av快播网址| 欧美日韩国产影院| 欧美激情免费在线| 亚洲成人国产精品| 国产精品亚洲视频在线观看| 精品国偷自产在线| 精品美女永久免费视频| 精品视频—区二区三区免费| 久久精品视频va| 国产一区二区三区三区在线观看| 久久精品国产免费观看| www.日韩不卡电影av| 亚洲视频在线免费看| 亚洲一级黄色av| 91av在线精品| 久久久久久综合网天天| 久久香蕉精品香蕉| 国产91网红主播在线观看| 欧美亚洲午夜视频在线观看| 97免费视频在线播放| 91日韩在线视频| 日本一本a高清免费不卡| 欧美小视频在线| 久久久爽爽爽美女图片| 国产69精品久久久久9| 91久久国产精品| 欧美疯狂性受xxxxx另类| 欧美亚洲在线播放| 亚洲精品720p| 在线视频欧美日韩精品| 亚洲伦理中文字幕| 欧美日韩久久久久| 91精品啪aⅴ在线观看国产| 视频直播国产精品| 亚洲成人a**站| 91亚洲国产成人久久精品网站| 欧美成人三级视频网站| 欧美激情亚洲自拍| 精品久久久久久亚洲国产300| www.日韩.com| 精品高清美女精品国产区| 日韩激情在线视频| 欧美极品少妇全裸体| 全球成人中文在线| 高清日韩电视剧大全免费播放在线观看| 国产精品福利在线观看| 久久久久久久91| 亚洲第一精品久久忘忧草社区| 欧美超级乱淫片喷水| 精品国产电影一区| 91视频免费在线| 欧美在线视频一二三| 久久久久久久一| 在线观看不卡av| 欧美老女人性视频| 欧美黄色小视频| 亚洲jizzjizz日本少妇| 国产精品日日摸夜夜添夜夜av| 国产精品户外野外| 国产一区二区精品丝袜| 性欧美办公室18xxxxhd| 韩国精品久久久999| 亚洲一区二区三区成人在线视频精品| 亚洲人永久免费| www.欧美精品一二三区| xxx欧美精品| 91精品国产91久久久久福利| 国产精品第2页| 热久久99这里有精品| 国产精品一区二区三区毛片淫片| 美女久久久久久久久久久| 亚洲女人初尝黑人巨大| 国产欧美日韩丝袜精品一区| 日本一区二区在线播放| 国产有码在线一区二区视频| 欧美精品久久久久久久免费观看|