iOS UIImagePNGR представляет кодировку base64, не дающую ожидаемого результата

Код

static func encodeImage(image: UIImage) -> String{
    var imageData = UIImagePNGRepresentation(image)
    let base64 = imageData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.allZeros)
    return base64
}

Не возвращает ожидаемый результат, когда результирующая строка декодируется в Java или с помощью онлайн-инструментов, воспроизводимое изображение не является допустимым файлом PNG.

Этот ответ здесь Кодировка Base64 в Swift не будет декодировать в Android. Это говорит о том, что проблема не в кодировке, а в том, что фактический PNG отличается от формата, используемого в Android, iOS, похоже, использует sRGB и Android sBIT.

Есть ли способ сделать эту работу

1 ответ

Решение

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

func imageToBase64(imageToDecode: UIImage!) -> String {
    var imageData = UIImageJPEGRepresentation(imageToDecode, 0.8)
    var base64String = imageData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0))
    base64String = base64String.stringByReplacingOccurrencesOfString("+", withString: "%2B", options: NSStringCompareOptions.LiteralSearch, range: nil)
    base64String = base64String.stringByReplacingOccurrencesOfString("/", withString: "%2F", options: NSStringCompareOptions.LiteralSearch, range: nil)
    return base64String
}
Другие вопросы по тегам