NSDataBase64DecodingOptions mengembalikan nilai nihil

Saya mencoba mengurai tipe base64 menjadi imageData. Tapi NSDataBase64DecodingOptions saya mengembalikan nihil. Saya mencetak decodeData dan hasilnya nihil. Kode saya ada di sini

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 sumber
comment
Kemungkinan besar itu berarti string Base64 tidak valid. Sudahkah Anda mengujinya di beberapa konverter Base64 online? NSData juga ketat tentang padding yang diperlukan (panjangnya harus kelipatan 4), bandingkan stackoverflow.com/questions/29152706/.   -  person Martin R    schedule 03.04.2015
comment
Halo Martin, ya, saya mencoba dan mendapatkan gambarnya dari konverter online...   -  person Yestay Muratov    schedule 03.04.2015
comment
Sudahkah Anda memverifikasi bahwa panjang string Base64 adalah kelipatan 4?   -  person Martin R    schedule 03.04.2015
comment
askapache.com/online-tools/base64-image-converter   -  person Yestay Muratov    schedule 03.04.2015
comment
apa maksudnya panjang kelipatan 4?   -  person Yestay Muratov    schedule 03.04.2015
comment
Saya tidak begitu yakin, apakah saya perlu memasukkan data:image\/png;base64 ke base64String?   -  person Yestay Muratov    schedule 03.04.2015
comment
Tidak. Panjang string Base64 harus kelipatan 4 (misalnya 4, 8, 12, ..., 100, 104, 108, ...). Lihat Padding di en.wikipedia.org/wiki/Base64. Tautan dari komentar pertama saya menunjukkan kemungkinan solusi.   -  person Martin R    schedule 04.04.2015
comment
jika countElements(base64String) % 4 != 0 { biarkan padlen = 4 - countElements(base64String) % 4 base64String += String(count: padlen, repeatValue: Character(=)) }   -  person Yestay Muratov    schedule 04.04.2015
comment
JSON saya kelipatan 4, saya menemukan skrip yang menambahkan = jika bukan kelipatan 4. Namun masalahnya bukan pada panjangnya!   -  person Yestay Muratov    schedule 04.04.2015
comment
Oke, itu hanya sebuah ide.   -  person Martin R    schedule 04.04.2015


Jawaban (1)


base64String Anda adalah

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

"data:image/png;base64," awal bukan bagian dari pengkodean Base64 dan harus dihapus sebelum string dapat didekode:

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

Kemudian

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

berhasil dan ditampilkan

masukkan deskripsi gambar di sini

person Martin R    schedule 04.04.2015