【问题标题】:Convert UIImage to base64 string in swift快速将 UIImage 转换为 base64 字符串
【发布时间】:2017-03-16 17:16:09
【问题描述】:

我正在尝试将 UIImage 转换为 base64 字符串,目的是将其上传到后端服务器。

但是,我在这篇文章中找到的转换代码(应该是苹果自己的实现)生成了一个无效的字符串:

Convert between UIImage and Base64 string

上传后,我得到这张图片:

[从iOS转换的base64解码的失败图像1

而不是这个:

[从在线base64转换工具解码的正确图像2

我使用 Postman 测试了上传结果,后端正确处理了有效的 base64 图像,因此我将错误范围缩小到 base64 转换本身。这是我的代码:

public extension UIImage
{
     func base64Encode() -> String?
    {
        guard let imageData = UIImagePNGRepresentation(self) else
        {
            return nil
        }

        let base64String = imageData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength)
        let fullBase64String = "data:image/png;base64,\(base64String))"

        return fullBase64String
    }
}

知道如何在将 iOS 设备上的 base64 输出上传到服务器之前修复它吗?

【问题讨论】:

  • 这在我看来完全正确,是什么让你认为这是转换?你检查过转换算法服务器端吗?
  • 试试base64EncodedStringWithOptions([])。您可能还需要替换“+”、“/”和“=”,比较 stackoverflow.com/a/39376534/1187415

标签: ios swift uiimage base64 uiimagepngrepresentation


【解决方案1】:

对于 Swift 4, 做这样的事情,

用于编码 -

let imgObj = UIImage(named: "photo")    
let imageData = UIImagePNGRepresentation(imgObj!)! as NSData
let base64 = imageData.base64EncodedData(options: .lineLength64Characters)

base64 变量的数据类型是 Data。

【讨论】:

    【解决方案2】:

    这样做:

    对于编码:

    data.base64EncodedStringWithOptions([])
    

    解码:

    let url = URL(string: String(format:"data:application/octet-stream;base64,%@",base64String))
    do {
        let data =  try Data(contentsOf: url!)
    }catch {
    
    }
    

    【讨论】:

    • 如果您使用Data base64EncodedString(options:) 方法将Data 编码为String,然后使用Data init?(base64Encoded:, options:) 初始化程序将字符串转换回Data
    猜你喜欢
    • 2014-05-10
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    • 2015-04-09
    • 1970-01-01
    • 1970-01-01
    • 2015-06-19
    • 2021-09-13
    相关资源
    最近更新 更多