[英]Decode base64 to uiimage iOS Swift
decodedData
為nil,但我的base64String包含一個非常長的字符串
編碼
var imgProfile:NSData = UIImagePNGRepresentation(imgUI)
let base64String = imgProfile.base64EncodedStringWithOptions(.allZeros)
解碼
let base64String = prefs.valueForKey("imgDefault") as? String
let decodedData = NSData(base64EncodedString: base64String!, options: NSDataBase64DecodingOptions(rawValue: 0) )
var decodedimage = UIImage(data: decodedData!)
我無法從base64輸出圖像
插入db之前,base64字符串ENCODE:
iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAMAAADDpiTIAAAADFBMVEXFxcX //// p6enW1tbAmiBwAAAAHGlET1QAAAACAAAAAAAAAQAAAAAoAAABAAAAAQAAAAYAppse6QAABcxJREFUeAHs3et22jAQReEQ3v + di8sikDaxZeGLdPTxpzS202jP9pwRkNWPDw8EEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQiCVwvV4 / p8fl9fH3K7cjsau2sBuBqfKvVf / X + ecnDQJtKSn9qw83DQIpDLqktcV / iECCAGFuXf9Rz6o / 5UHPEtTe + t9V0Qj6dGCb6t9d4EBvDrzb + B / 3gOlvsqAjB97M / F + RF / + KjUEfDuxU / nsb6APBwD / llsn / UycwDTQt1443 / 9MGSdCqA4eUXxK0Wv6P917xed7hJc8 + m6Uw7A922O1 / 90MOtGXaweWXA8OXnwINKXAtSe1dzvGWcQManND9nzIZBU434MjZ / 1n45zP7gVMVOPX2v1ugCZxowHnp / 2wBl4tJ4CwFzm7 / DwvEwCkGNND + vwzQBI5XoI32 / 1CAAUcb0Er7fxggBg41oKH2 / 2WAJnCcAg3Wf / rU4HEABv + Xmqw / Aw6zsq3x7xEB0596wBEStFt / Boxefwbsb0Br27 / XBJie2w7u60Dr9WfA6PVnwJ4GtDz / PbPAXmAvB / qov0lw9PozYB8Dern / pyyQAts70Ojr V8 / of33mfYHNBeiq / t4X2L
從數據庫中拉出時,base64字符串DECODE:
可選的(“iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAMAAADDpiTIAAAADFBMVEXFxcX //// p6enW1tbAmiBwAAAAHGlET1QAAAACAAAAAAAAAQAAAAAoAAABAAAAAQAAAAYAppse6QAABcxJREFUeAHs3et22jAQReEQ3v di8sikDaxZeGLdPTxpzS202jP9pwRkNWPDw8EEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQiCVwvV4 / p8fl9fH3K7cjsau2sBuBqfKvVf / X ecnDQJtKSn9qw83DQIpDLqktcV / iECCAGFuXf9Rz6o / 5UHPEtTe t9V0Qj6dGCb6t9d4EBvDrzb B / 3gOlvsqAjB97M / F RF / KjUEfDuxU / nsb6APBwD / llsn / UycwDTQt1443 / 9MGSdCqA4eUXxK0Wv6P917xed7hJc8 m6Uw7A922O1 / 90MOtGXaweWXA8OXnwINKXAtSe1dzvGWcQManND9nzIZBU434MjZ / 1n45zP7gVMVOPX2v1ugCZxowHnp / 2wBl4tJ4CwFzm7 / DwvEwCkGNND vwzQBI5XoI32 / 1CAAUcb0Er7fxggBg41oKH2 / 2WAJnCcAg3Wf / rU4HEABv Xmqw / Aw6zsq3x7xEB0596wBEStFt / Boxefwbsb0Br27 / XBJie2w7u60Dr9WfA6PVnwJ4GtDz / PbPAXmAvB / qov0lw9PozYB8Dern / py yQAts70Ojrv8 / of33mfYHNB
有兩個不同的問題:
似乎+
字符已替換為空格。 如果您提交application/x-www-form-urlencoded
請求,而沒有百分號轉義+
字符,則會發生這種情況。 當您第一次發送base64字符串以存儲在數據庫中時,可能會發生這種情況。
有關某些百分比編碼模式的討論,請參見https://stackoverflow.com/a/24888789/1271826 。 這里的關鍵點是不要依賴stringByAddingPercentEscapesUsingEncoding
,因為這將允許+
字符不轉義。
該字符串也缺少結尾的=
字符。 (字符串的長度應該是四的倍數,在這種情況下,它是兩個短字符,因此在演繹的末尾應該有==
,其中帶有+
字符(“ before”字符串)。有時是由於設計不佳的base64編碼器導致的錯誤,這不是base64EncodedStringWithOptions
遭受的問題。
在這種情況下,看起來必須更長的base64字符串必須以某種方式被截斷。 (您的字符串可疑地接近1024個字符。大聲笑。)如果將參數放在URL中而不是請求的正文中,則可能會發生這種截斷。 但是此代碼示例中沒有任何內容可以解釋此行為,因此問題出在其他地方。
但是請看原始NSData
的length
。 base64字符串應比該字符串大1/3(加上尾隨=
字符后,四舍五入到最接近的四個字符)。
而且,一旦解碼了提供的字符串並查看實際內容,您還可以看到base64字符串被截斷了。 (根據提供的部分,應該有1484字節的IDAT
數據,沒有,還有IEND
塊……不用擔心那些細節,但是請放心,基本上是說PNG數據流不完整。)
如果返回nil,則您的base64字符串無效。 NSData(base64EncodedString:options:)
需要一個base64字符串,該字符串用=填充為4的倍數。
這是一個類似的問題(Obj-C中除外)。 NSData將不接受有效的base64編碼的字符串
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.