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, ...) ดู Padding ใน en.wikipedia.org/wiki/Base64 ลิงก์จากความคิดเห็นแรกของฉันแสดงวิธีแก้ปัญหาที่เป็นไปได้   -  person Martin R    schedule 04.04.2015
comment
if countElements(base64String) % 4 != 0 { ให้ padlen = 4 - countElements(base64String) % 4 base64String += String(count: padlen, RepeatValue: 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