2016-11-15 1 views
0

У меня есть словарь whre я положил несколько значенийКак преобразовать строку в UIImage?

let params:[String:Any?]=[ 
      "upload":(postInfo["upload"]?.isEmpty)! ? nil : UIImage(data: Data.init(base64Encoded: postInfo["upload"]!)!), 
      "type-place":postInfo["type-place"]!, 
      "place":postInfo["place"]!, 
      "city-place":postInfo["city-place"]!, 
      "name-place":postInfo["name-place"]!, 
      "web-site":postInfo["web-site"]!, 
      "e-mail":postInfo["e-mail"]!, 
      "mob-tel":postInfo["mob-tel"]!, 
      "mob-tel-dop":postInfo["mob-tel-dop"]!, 
      "adress":postInfo["adress"]!, 
      "adressMapH":postInfo["adressMapH"]!, 
      "content":postInfo["content"]!, 
      "work-day":postInfo["work-day"]!, 
      "priceS":postInfo["priceS"]!, 
      "priceE":postInfo["priceE"]!, 
      "countPlaceS":postInfo["countPlaceS"]!, 
      "countPlaceE":postInfo["countPlaceE"]!, 
      "link-vk":postInfo["link-vk"]!, 
      "link-inst":postInfo["link-inst"]!, 
      "link-fs":postInfo["link-fs"]!, 
      "link-twitter":postInfo["link-twitter"]!, 
      "upload1":(postInfo["upload1"]?.isEmpty)! ? nil : UIImage(data: Data.init(base64Encoded: postInfo["upload1"]!)!), 
      "halal":(postInfo["properties"]?.contains("халяль"))! ? "1":"0", 
      "wifi":(postInfo["properties"]?.contains("wi-fi"))! ? "1":"0", 
      "card":(postInfo["services"]?.contains("оплата картой"))! ? "1":"0", 
      "vip":(postInfo["services"]?.contains("гардероб"))! ? "1":"0", 
      "parking":(postInfo["services"]?.contains("парковка"))! ? "1":"0", 
      "garderob":(postInfo["services"]?.contains("гардероб"))! ? "1":"0", 
      "upload2":postInfo["upload2"], 
      "upload3":postInfo["upload3"], 
      "isAkc":(postInfo["descActionSale"]?.isEmpty)! ? "0":"1", 
      "descActionSale":postInfo["descActionSale"]!, 
      "deposit":postInfo["deposit"]! 
     ] 

и в стоимостном upload2/upload3 я сохранить base64String массив.

Мне нужно преобразовать массив upload2/upload3 в UIImageJPEGRепредставление и поместить его в multipart данные формы, используя Alamofire. Там мой код:

Alamofire.upload(multipartFormData: { 
      multipartFormData in 
      for (key,value) in params{ 
       if key == "upload2"{ 
        for item in (params["upload2"] as! String).components(separatedBy: ","){ 

         let decodedData = Data.init(base64Encoded: item, options: Data.Base64DecodingOptions.init(rawValue: 0)) 
         if let img=UIImage(data: decodedData!){ 
          let m=UIImageJPEGRepresentation(img, 1) 
          multipartFormData.append(m!, withName: key, mimeType: "image/jpeg") 
         } 
        } 
       }else if key == "upload3"{ 
        for item in (params["upload3"] as! String).components(separatedBy: ","){ 
         if let img=UIImage(data: Data.init(base64Encoded: item)!){ 
          let m=UIImageJPEGRepresentation(img, 1) 
          multipartFormData.append(m!, withName: key, mimeType: "image/jpeg") 
         } 
        } 
       }else{ 
        multipartFormData.append((value as! String).data(using: .utf8)!, withName: key) 
       } 
      } 
     }, usingThreshold: SessionManager.multipartFormDataEncodingMemoryThreshold, to: "http://kuda-poydem.kz/apitest.php?act=org_add&add-new-place=1", method: .post, headers: headers, encodingCompletion: { 
      (encodingResult) in 
      switch encodingResult{ 
      case .success(request: let upload, streamingFromDisk: _, streamFileURL: _): 
       upload.responseJSON{ 
        response in 
        print(response) 
       } 
       break 
      default: 
       break 
      } 
     }) 

Но я получил сообщение об ошибке: enter image description here

Ошибка:

2016-11-15 13:38:18.027 kp[6504:146465] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid type in JSON write (UIImage)' 
+3

Вы не можете сериализировать 'UIImage' в формате JSON, это то, что говорит сообщение об ошибке. Чтобы загрузить 'Data', вам нужно закодировать его в кодировке base64. – vadian

+0

Является ли ваша строка кодировкой base64? Если да, то преобразование его в UIImage должно быть [довольно простым] (http://stackoverflow.com/questions/11251340/convert-between-uiimage-and-base64-string) Преобразование строки в данные и преобразование NSData в UIImage – NSNoob

+0

Я использую UIImageJPEGRepresentation (selectedImage, 1) ?. base64EncodedString(). Это правильно? –

ответ

0

Может вы пошло не так в преобразовании

Swift3: Формат base64String Правильно и попробуйте

данных в Base64String

var base64String: NSString! 
let myImage = UIImage(named:"image.png") 
let imageData = UIImageJPEGRepresentation(myImage, 0.9) 
base64String = imageData!.base64EncodedString(options: NSData.Base64EncodingOptions.endLineWithLineFeed) as NSString! 
print(base64String) 

Base64String к данным

let thumbnail1Data = Data(base64Encoded: base64String as String, options: NSData.Base64DecodingOptions() 
imageView?.image = UIImage(data: thumbnail1Data as Data) 
Смежные вопросы