Массив байтов ответа от json - PullRequest
0 голосов
/ 13 июня 2018

Как мне ответить байтовый массив с сервера и преобразовать его в изображение.Это мой код введите описание изображения здесь

Alamofire.request(mainUrl, method:.post , parameters: paramstring , encoding: JSONEncoding.default, headers: nil).responseJSON { response in
        if let data = response.data
        {
            switch response.result
            {
            case.failure(let error):
            print(error)
            case.success(let value):
                let json = JSON(value)
                guard let dataarr = json["my_profile"].arrayObject as? [String] else {return}
                let image = dataarr[0]
                let mydata = image.data(using: String.Encoding.utf8)! as NSData
                print(mydata)
                let mybase64 = mydata.base64EncodedData(options: NSData.Base64EncodingOptions.endLineWithLineFeed)
                print(mybase64)
                self.MainView.avatarImageView.image = UIImage(data: mybase64)

            }
        }

, как вы можете видеть, это не байтовый массив, и он продолжается до 1000 строк введите описание изображения здесь

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Ваши данные не в кодировке Base64.Это закодировано в шестнадцатеричном формате.Вам необходимо расшифровать его в шестнадцатеричном формате, а не использовать base64EncodedData.

Сначала вам нужно отбросить первые два символа (\x):

let hex = dataarr[0].dropFirst(2)

Затем вам нужен методпреобразовать гекс в данныеЕсть много способов.Вот один из них:

extension Data {
    init?<S: StringProtocol>(hexString: S) {
        guard hexString.count % 2 == 0 else { return nil }  // Must be even number of letters

        var bytes: [UInt8] = []

        var index = hexString.startIndex
        while index != hexString.endIndex {
            let secondIndex = hexString.index(after: index)
            let hexValue = hexString[index...secondIndex]
            guard let byte = UInt8(hexValue, radix: 16) else { return nil } // Unexpected character
            bytes.append(byte)
            index = hexString.index(after: secondIndex)
        }
        self.init(bytes)
    }
}

С этим, расшифруйте его:

if let data = Data(hexString: hex),
   let image = UIImage(data: data) {
       // ... use image
}
0 голосов
/ 13 июня 2018

Замените ваш код

let mydata = image.data(using: String.Encoding.utf8)! as NSData
print(mydata)
let mybase64 = mydata.base64EncodedData(options: NSData.Base64EncodingOptions.endLineWithLineFeed)
print(mybase64)
self.MainView.avatarImageView.image = UIImage(data: mybase64)

на

if let mydata : Data = Data(base64Encoded: image, options: .ignoreUnknownCharacters) {
   DispatchQueue.main.async {
       self.MainView.avatarImageView.image = UIImage(data: mydata)
    }

}
...