NSDataBase64DecodingOptions возвращает нулевое значение

Я пытаюсь разобрать тип base64 в imageData. Но мой NSDataBase64DecodingOptions возвращает ноль. Я напечатал decodedData, и он равен нулю. Мой код здесь

var base64String = arrayText["auto_type_android_img"] as String

println("basestring64 is \(base64String)")

let decodedData = NSData(base64EncodedString: base64String, options: NSDataBase64DecodingOptions(rawValue: 0))

println("base string is: \(decodedData)")
if let decodedImage = UIImage(data: decodedData!) {

    imageTypeOfCar?.image = decodedImage
}

person Yestay Muratov    schedule 03.04.2015    source источник
comment
Скорее всего, это означает, что строка Base64 недействительна. Вы тестировали его в каком-нибудь онлайн-конвертере Base64? Также NSData строго относится к требуемому заполнению (длина должна быть кратна 4), сравните stackoverflow.com/questions/29152706/.   -  person Martin R    schedule 03.04.2015
comment
Привет, Мартин, да, я пытался, и я получил изображение из онлайн-конвертера...   -  person Yestay Muratov    schedule 03.04.2015
comment
Вы убедились, что длина строки Base64 кратна 4?   -  person Martin R    schedule 03.04.2015
comment
askapache.com/online-tools/base64-image-converter   -  person Yestay Muratov    schedule 03.04.2015
comment
что вы имеете в виду, говоря, что длина кратна 4?   -  person Yestay Muratov    schedule 03.04.2015
comment
Я не совсем уверен, нужно ли включать data:image\/png;base64 в base64String?   -  person Yestay Muratov    schedule 03.04.2015
comment
Нет. Длина строки Base64 должна быть кратна 4 (например, 4, 8, 12,..., 100, 104, 108,...). Взгляните на заполнение в en.wikipedia.org/wiki/Base64. Ссылка из моего первого комментария показывает возможный обходной путь.   -  person Martin R    schedule 04.04.2015
comment
if countElements(base64String) % 4 != 0 { let padlen = 4 - countElements(base64String) % 4 base64String += String(count: padlen, RepeatedValue: Character(=)) }   -  person Yestay Muratov    schedule 04.04.2015
comment
мой JSOn кратен 4, я нашел скрипт, который добавляет =, если он не кратен 4. Однако проблема не в длине!   -  person Yestay Muratov    schedule 04.04.2015
comment
Ладно, это была просто идея.   -  person Martin R    schedule 04.04.2015


Ответы (1)


Ваш base64String

data:image/png;base64,iVBORw0KGgoA......YII=

Начальный "data:image/png;base64," не является частью кодировки Base64 и должен быть удален перед декодированием строки:

if let range = base64String.rangeOfString("data:image/png;base64,", options: .AnchoredSearch)  {
    base64String.removeRange(range)
}

затем

let decodedData = NSData(base64EncodedString: base64String, options: nil)
if let decodedImage = UIImage(data: decodedData!) {
    imageTypeOfCar?.image = decodedImage
}

удается и показывает

введите здесь описание изображения

person Martin R    schedule 04.04.2015