簡體   English   中英

將base64解碼為uiimage iOS Swift

[英]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

有兩個不同的問題:

  1. 似乎+字符已替換為空格。 如果您提交application/x-www-form-urlencoded請求,而沒有百分號轉義+字符,則會發生這種情況。 當您第一次發送base64字符串以存儲在數據庫中時,可能會發生這種情況。

    有關某些百分比編碼模式的討論,請參見https://stackoverflow.com/a/24888789/1271826 這里的關鍵點是不要依賴stringByAddingPercentEscapesUsingEncoding ,因為這將允許+字符不轉義。

  2. 該字符串也缺少結尾的=字符。 (字符串的長度應該是四的倍數,在這種情況下,它是兩個短字符,因此在演繹的末尾應該有== ,其中帶有+字符(“ before”字符串)。有時是由於設計不佳的base64編碼器導致的錯誤,這不是base64EncodedStringWithOptions遭受的問題。

    在這種情況下,看起來必須更長的base64字符串必須以某種方式被截斷。 (您的字符串可疑地接近1024個字符。大聲笑。)如果將參數放在URL中而不是請求的正文中,則可能會發生這種截斷。 但是此代碼示例中沒有任何內容可以解釋此行為,因此問題出在其他地方。

    但是請看原始NSDatalength 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM