UIImagePNGRepresentationというものが何に変換しているのか教えてください。
通常下記のコードのように使うのですが
swift
1let file: NSData = UIImagePNGRepresentation(/*ここにUIImage()が必要*/)! as NSData
これはNSDataに変換してると言うのは見てわかるのですが、画像をNSDataにすると言うことはバイナリデータに変換していると言うことですか?
(UIImage => NSData = バイナリデータ)
もし、これが正しければこのバイナリデータをJsonでphpへ送り画像として保存することは可能ですか?
具体的には以下のようなコードを考えています。
swift
1func sendData(){ 2 3 /// 画像をNSdata化 4 let imaaaaaaage: NSData = UIImagePNGRepresentation(/*ここに画像が必要*/)! as NSData 5 6 /// パラメーターに送信情報を追加 7 let params:[[String:Any]] = [ 8 ["param": "これからテキストとともに画像を送りますよっと", "image": imaaaaaaage] /// もしや一緒に送れるのでは??? 9 ] 10 11 /// POST送信 12 let urlString = "https://www.XXXXXXX.com/gazou.php" /// 送り先 13 let request = NSMutableURLRequest(url: URL(string: urlString)!)/// URLリクエスト生成 14 request.httpMethod = "POST" /// POST送信しますよ 15 request.addValue("application/json", forHTTPHeaderField: "Content-Type")/// Json形式を送りますよ 16 do{ 17 request.httpBody = try JSONSerialization.data(withJSONObject: params, options: .prettyPrinted)/// 送ってますよ 18 let task:URLSessionDataTask = URLSession.shared.dataTask(with: request as URLRequest, completionHandler: {(data,response,error) -> Void in 19 let resultData = String(data: data!, encoding: .utf8)!/// 帰ってきたよ 20 21 DispatchQueue.main.asyncAfter(deadline: .now() + 0.0) {/// 受け取れないことがあるので遅延追加してるよ 22 do { 23 /// 受け取ったデータJsonを配列に 24 let jsonString: String = resultData 25 let personalData: Data = jsonString.data(using: String.Encoding.utf8)! 26 let items = try JSONSerialization.jsonObject(with: personalData) as! Array<[String]>///なおしたよ 27 28 print("(items)さてどうだ?") 29 30 } catch { 31 print(resultData) 32 } 33 } 34 35 }) 36 task.resume() 37 }catch{ 38 print("Error:(error)") 39 } 40} 41
php
1<?php 2 3$json = file_get_contents('php://input');///こっから3行ファイルを取得してjsonから配列にデコードしてるよっと 4$json = mb_convert_encoding($json, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN'); 5$arr = json_decode($json,true); 6 7$arr_image = $arr['image'];///遅れたかな? 8file_put_contents('image.png',$arr_image);/// 保存できるかな 9 10$data_ary[] = array( 11 ///空配列 12); 13 14header("Content-Type: application/json"); 15echo json_encode($data_ary); 16 17exit(); // 処理終了 18?>
5/21追記
下の方のアドバイスによりできました。
swift
1let binaryImage: String = UIImagePNGRepresentation(/*UIImage*/)!.base64EncodedString(options: .lineLength64Characters)
これで画像をbase64にしてjsonなりに入れて送り、サーバー側でbase64をデコードすれば画像ファイルとして保存が可能になりました。
自分の環境では一度UTF8にしてましたが、base64変換なので特に問題はなくそのままbase64デコードでできました。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/21 12:43