2016-11-03 9 views
1

Я пытаюсь преобразовать UIImage в строку base64 с целью его загрузки на серверный сервер.Преобразование UIImage в base64 string в swift

Однако преобразование код я нашел в этой статье (которая должна быть собственная реализация от Apple) генерирует недопустимую строку:

Convert between UIImage and Base64 string

После загрузки, я получаю это изображение:

[Failty изображение, которое декодируется из прошивки преобразована Base64 1

Вместо этого:

[Правильное изображение декодируется из онлайна-инструмента преобразования base64 2

Я проверил результаты закачивать с помощью почтальону и задняя конец ручку действительного base64 изображения правильно, поэтому я сузил ошибку вплоть до самого преобразования base64. Вот мой код:

public extension UIImage 
{ 
    func base64Encode() -> String? 
    { 
     guard let imageData = UIImagePNGRepresentation(self) else 
     { 
      return nil 
     } 

     let base64String = imageData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength) 
     let fullBase64String = "data:image/png;base64,\(base64String))" 

     return fullBase64String 
    } 
} 

Любая идея, как я могу исправить мой выход base64 на устройстве IOS, прежде чем я загрузить его на сервер?

+0

Это выглядит абсолютно правильно для меня, что заставляет вас думать, что это конверсия? Вы проверили сервер сервера преобразования? –

+1

Попробуйте 'base64EncodedStringWithOptions ([])'. Возможно, вам также придется заменить «+», «/» и «=», сравнить http://stackoverflow.com/a/39376534/1187415. –

ответ

4

ли это что-то вроде этого:

Для Encoding:

data.base64EncodedStringWithOptions([]) 

Для декодирования:

let url = URL(string: String(format:"data:application/octet-stream;base64,%@",base64String)) 
do { 
    let data = try Data(contentsOf: url!) 
}catch { 

} 
+0

Если вы используете 'Data base64EncodedString (options:)' метод для кодирования 'Data' в' String', то используйте инициализатор инициализации 'Data init? (Base64Encoded :, options:)' для преобразования строки в 'Data '. – rmaddy

0

для Swift 4, ли что-то подобное,

Для кодирования -

let imgObj = UIImage(named: "photo")  
let imageData = UIImagePNGRepresentation(imgObj!)! as NSData 
let base64 = imageData.base64EncodedData(options: .lineLength64Characters) 

тип данных переменной base64 является Data.