質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

2回答

6317閲覧

UIImagePNGRepresentationとは何ですか?

bilieikbilibili

総合スコア37

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2018/05/19 13:46

編集2018/05/21 12:48

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デコードでできました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

UIImagePNGRepresentationとは何ですか?

UIImageData型に変換するメソッドですね。

これが正しければこのバイナリデータをJsonでphpへ送り画像として保存することは可能ですか?

可能です。古いですが NSURLSessionを使ってバイナリの画像ファイルをPSOTする を参考にしてみてください。

multipart/form-dataで検索すると他にもヒントがあると思います。

投稿2018/05/19 15:40

_Kentarou

総合スコア8490

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bilieikbilibili

2018/05/21 12:43

回答ありがとうございます。 現在おかげでデータ転送ができることを確認できました。 しかし、そのままでは画像の転送はできずbase64に変換がひつようでした。
guest

0

ベストアンサー

Base64エンコードしてテキスト(文字列)として送信して下さい。

ref. base64EncodedString(options:)

投稿2018/05/21 01:00

fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bilieikbilibili

2018/05/21 12:44

回答ありがとうございます。 base64に変換したところ正常に動作しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問