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
}