Конвертировать UIImage в строку base64 в swift

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

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

Преобразование между строкой UIImage и Base64

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

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

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

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

Я протестировал результаты загрузки, используя Postman, и серверная часть правильно обрабатывает действительный образ 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, прежде чем загрузить его на сервер?

2 ответа

Решение

Сделайте это примерно так:

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

data.base64EncodedStringWithOptions([])

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

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

}

Для Swift 4, сделай что-нибудь подобное,

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

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

Тип данных переменной base64 - Данные.

Другие вопросы по тегам