iOS 選取圖片 後臺給旋轉 多圖上傳 代理方法不執行
經歷了一個新的專案,也是一個新的團隊.圖片上傳,成了重點.
1.圖片上傳伺服器之後,在獲取的時候被旋轉了90度.
解決辦法為:將回調的image物件進行如下處理,
if (image.imageOrientation != UIImageOrientationUp) { UIGraphicsBeginImageContextWithOptions(image.size, NO, image.scale); [image drawInRect:(CGRect){0,0,image.size}]; UIImage * normalizedImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); image = normalizedImage; }
2.有的照片在沒有完全從icould下載完成的時候,代理方法獲取到的image為nil.或者選取圖片的代理方法不走.
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(nullable NSDictionary<NSString *,id> *)editingInfo NS_DEPRECATED_IOS(2_0, 3_0); - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info;
第一個代理方法選取的照片為沒有完全從icould下載完成,那麼這個代理方法是不執行的.(上傳後臺可能不被旋轉)
第二個代理方法獲取圖片方法如下,這個代理方法執行,但是獲取到的image物件是空的,這需要我們用程式碼是去判斷,不然對image進行操作的話,容易因為image為nil造成崩潰.(上傳後臺可能被旋轉)
UIImage *image = info[UIImagePickerControllerOriginalImage];
3.多圖上傳.
這個需要後臺的配合,oc程式碼實現如下
+ (void)post:(NSString *)url target:(UIViewController *)target params:(NSDictionary *)params fileDatas:(NSArray *)fileDatas name:(NSString *)name fileNames:(NSArray *)fileNames mimeTypes:(NSArray *)mineTypes success:(void (^)(id json))success failure:(void (^)(NSError *error))failure { [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES]; if (target) { [MBProgressHUD showHUDAddedTo:target.view animated:YES]; } // 1.建立一個管理者 AFHTTPSessionManager *session = [AFHTTPSessionManager manager]; session.requestSerializer.timeoutInterval = 10; session.responseSerializer = [AFHTTPResponseSerializer serializer]; session.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/html",@"image/png", @"text/plain",nil];//,@"text/plain" // 2.傳送請求 NSDictionary * dic = [BaseHttp encryptionDictionary:params withEnp:YES]; JMLog(@"%@",dic); [session POST:url parameters:dic constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) { // 在傳送請求之前會自動呼叫這個block // 需要在這個block中新增檔案引數到formData中 if (fileDatas.count == fileNames.count && fileNames.count == mineTypes.count) { for (int i = 0; i < fileDatas.count; i++) { [formData appendPartWithFileData:fileDatas[i] name:[NSString stringWithFormat:@"%@%d",name,i] fileName:fileNames[i] mimeType:mineTypes[i]]; } } } progress:^(NSProgress * _Nonnull uploadProgress) { } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO]; if (target) { [MBProgressHUD hideHUDForView:target.view]; } if (success) { success([BaseHttp decodingData:responseObject]); } } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO]; if (target) { [MBProgressHUD hideHUDForView:target.view];
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info;
} if (failure) { failure(error); } }];}
呼叫示例:這個方法要求傳入的不是iamge物件.是UIImageJPEGRepresentation方法轉換之後的圖片
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
NSDictionary * params = @{@"type":@"3"};
NSArray * array = @[UIImageJPEGRepresentation([UIImage imageNamed:@"card_placeholder_1"], 0.5),UIImageJPEGRepresentation([UIImage imageNamed:@"card_placeholder_2"], 0.5),UIImageJPEGRepresentation([UIImage imageNamed:@"card_placeholder_3"], 0.5),UIImageJPEGRepresentation([UIImage imageNamed:@"card_placeholder_1"], 0.5),];
[BaseHttp post:[NSString stringWithFormat:@"%@%@",@"http://img.upload.com",@"/appinlet/test_upload"] params:params fileDatas:array name:@"image" fileNames:@[@"1",@"2",@"3",@"4"] mimeTypes:@[@"image/png",@"image/png",@"image/png",@"image/png"] success:^(id json)
{
JMLog(@"%@",json);
} failure:^(NSError *error)
{
JMLog(@"%@",error);
}];
}
總結:圖片選取應該這麼幹,非空判斷,防止圖片被後臺旋轉
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info
{
UIImage * image = info[UIImagePickerControllerOriginalImage];
if (!image)
{
return;
}
if (image.imageOrientation != UIImageOrientationUp)
{
UIGraphicsBeginImageContextWithOptions(image.size, NO, image.scale);
[image drawInRect:(CGRect){0,0,image.size}];
UIImage * normalizedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
image = normalizedImage;
}
[self dismissViewControllerAnimated:YES completion:nil];
}
相關推薦
iOS 選取圖片 後臺給旋轉 多圖上傳 代理方法不執行
經歷了一個新的專案,也是一個新的團隊.圖片上傳,成了重點.1.圖片上傳伺服器之後,在獲取的時候被旋轉了90度. 解決辦法為:將回調的image物件進行如下處理,if (image.imageOrientation != UIImageOrientationUp)
file input標籤支援圖片、視訊、多圖上傳
說明 1)file input 標籤的三個屬性合理使用可支援圖片上傳,視訊上傳,多圖上傳 2)即accept、capture、multiple三個屬性 各屬性介紹 1、accept屬性 直接開啟系統檔案目錄,規定在檔案上傳中伺服器只接受影象檔案 屬性
js上傳圖片預覽,php後臺接收例項,已改寫為多圖上傳預覽
上傳圖片預覽這個出自超實用的js程式碼段,關於圖片的處理那一章,php後臺接收是網上比較少這方面的資源或者寫得很複雜,這裡簡單記錄。都是基於js 首先先呼叫兩個資料夾animateManage.js和viewimg.js,可以在網上下載。相當好用。 關鍵點是FileRead
實現點擊單個圖片的多圖上傳
cells any cell sage cookie append toast its cin 這是一個通過接口實現上傳圖片,然後調用另一個接口統一提交的方法 結構 <div class="load-box"> <label for="b
iOS 使用AFN 進行單圖和多圖上傳
圖片上傳時必要將圖片進行壓縮,不然會上傳失敗 1.單張圖上傳 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; [manager POST:urlStr
小程式上傳圖片多圖上傳
//上傳圖片 多圖 choosePic: function() { var that = this; wx.chooseImage({ count: 9, // 預設9 sizeType: ['compressed'], //
小程式如何實現多圖上傳、圖片預覽效果?(程式碼示例)
wxml程式碼: <view class="weui-uploader__hd"> <view class="weui-uploader__title">點選可預覽選好的圖片</view> <view class="weui-
react-native多圖上傳 react-native-image-picker圖片上傳之多個上傳圖片
話不多說 直接貼程式碼, 如有疑問 下方留言或者發郵箱 引入需要的元件 import ImagePicker2 from 'react-native-image-picker'; import RNHeicConverter from 'react-native
記錄 呼叫微信圖片上傳 前端上傳 後端Java下載儲存(多圖上傳)
測試頁面 <template> <div id="test"> <button @click="wxchoose">微信上傳測試</butt
【功能點】前端vue傳過來的是base64格式(解碼變成二進位制)的圖片怎麼做多圖上傳
此是tp5框架,控制器中的程式碼 總體思路: 1、先接收資料,遍歷到是字串為止 2、處
H5實現多圖上傳與預覽,圖片壓縮上傳
H5多圖上傳,並實現壓縮(可根據實際情況選擇對多大的圖片進行壓縮,本例為大於512KB的進行壓縮)和預覽 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT
【功能點】tp3.1使用webuploader0.1.5外掛多圖上傳,後臺php原生接收
效果: 對應的效果是: 1、上傳圖片:選擇圖片-》開始上傳圖片(上傳成功後)-》會顯示上傳成功 && 可以通過下拉框和文字框,一起上傳 2、刪除圖片:點選刪除,刪除整個節點 3、修改圖片附屬資訊:就是修改下拉框和文字框中的值 亮點在於: 1、前端
UEditor上傳圖片後,展示的順序與選擇時順序不一致(多圖上傳)
UEditor多圖上傳時,由於後臺上傳介面返回的時間不同,會造成顯示上傳後的圖片與選擇時的圖片順序不一致的問題。 舉個栗子: 多圖上傳時,先後選擇了a.png和b.png,其中a.png大小為900k,b.png大小為5k,當上傳成功後點擊確認按鈕, 發現b
多圖上傳控制器及模型代碼(2)thinkphp5+layui實現多圖上傳保存到數據庫,可以實現圖片自由排序,自由刪除。
each ons param remove mon ret value settime item 公共css代碼 <style> .layui-upload-img { width: 90px; height: 90px; margin: 0;
bootstrap file input 實現多圖上傳功能
slow customer dex event view 文件 all shee end 官方文檔 http://plugins.krajee.com/ demo http://plugins.krajee.com/file-input-ajax-demo/3
Thinkphp5 多圖上傳
lena action val clas 錯誤 err each form files html代碼 <div class="content" id="content_list"> <!-- 上傳部分 -->
Vue的移動端多圖上傳插件vue-easy-uploader
ext gin ted log code 支持 使用 tip master 原文地址 前言 這段時間趕項目,需要用到多文件上傳,用Vue進行前端項目開發。在網上找了不少插件,都不是十分滿意,有的使用起來繁瑣,有的不能適應本項目。就打算自己折騰一下,寫一個Vue的上傳插件,一
tp5多圖上傳
html inf pic hidden download jquery 獲得 後臺 filetype 首先是最終的完成效果 這裏是源代碼下載地址 https://pan.baidu.com/s/1eSAQoSy 然後是具體的詳細步驟(圖片為網上參考,代碼是實際寫出效果
【轉載】laravel中使用WangEditor及多圖上傳
1.2 sources views created select pic head 使用說明 token 1. 創建項目及安裝所需安裝包 1.1 創建項目 composer create-project laravel/laravel=5.3 blog_wangeditor
jQuery多圖上傳預覽
<!doctype html> <html> <head> <meta charset="utf-8"> <title>jQuery多圖上傳預覽</title> <script src="http://libs.baidu