如何将MySQL中Blob存储的base64图片数据转换为Swift可用的UIImage
编辑2
对于所有遇到这个问题的开发者,我找到了一个可行的临时解决方法。我暂时不确定具体原因(所以我没有将其作为正式答案发布),如果有人了解原因欢迎补充,我也很乐意学习,以下是我找到的解决方案:
从服务端获取到responseData后,我先通过如下方法将其转换为字符串:
let string = String(data: responseData, encoding: .utf8)!
(我为了方便测试在此处做了强制解包,正式版本中我会使用可选绑定处理)
之后我再通过Swift自带的方法将字符串重新转换为Data:
let data = Data(base64Encoded: string)
将转换后的data传入UIImage即可正常生成图片,运行完全正常!
我猜测是PHP和Swift的编码方式存在差异?或是Swift需要对这类数据做额外处理?不管原因是什么,这个方法是可行的,希望能帮到其他遇到相同问题的人!
原始问题
我有一张图片以Blob格式存储在MySQL服务器中,图片上传时我通过PHP的base64_encode()函数做了base64编码。
编码后会生成类似如下的长字符串(编辑:完整字符串约20万字节):
iVBORw0KGgoAAAANSUhEUgAABAAAAAQACAYAAAB/HSuDAAAAAXNSR0IArs4c6QAAAMZlWElmTU0AKgAAAAgABgESAAMAAAABAAEAAAEaAAUAAAABAAAAVgEbAAUAAAABAAAAXgEoAAMAAAABAAIAAAExAAIAAAAVAAAAZodpAAQAAAABAAAAfAAAAAAAAABIAAAAAQAAAEgAAAABUGl4ZWxtYXRvciBQcm8gMi4xLjIAAAAEkAQAAgAAABQAAACyoAEAAwAAAAEAAQAAoAIABAAAAAEAAAQAoAMABAAAAAEAAAQAAAAAADIwMjE6MDM6MDQgMTQ6NDk6MjQAYZVljgAAAAlwSFlzAAALEwAACxMBAJqcGAAAA6ppVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDYuMC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtb...
我在Swift中使用常规网络请求获取服务端返回的数据,代码如下:
func getImages(iD: Int, completed: @escaping (Result<Data, Error>) -> Void) { let urlString = "https://example.com/getImages.php?id=\(iD)" guard let url = URL(string: urlString) else { completed(.failure(ErrorMessages.urlError)) return } let task = URLSession.shared.dataTask(with: url) { data, response, error in if let _ = error { completed(.failure(ErrorMessages.networkingError)) } guard let data = data else { completed(.failure(ErrorMessages.dataError)) return } completed(.success(data)) } task.resume() }
但我尝试使用UIImage(data: responseData)创建图片时,页面仅显示空白。我还尝试过调用.base64EncodedData()处理数据,依旧无效。
请问我哪里操作有误导致图片显示空白?我是否需要调整编码处理逻辑?
内容的提问来源于stack exchange,提问作者Jeff Cournoyer
相关产品推荐
相关产品推荐

