用于上传的 Swift 3 base64 编码图像

Posted

技术标签:

【中文标题】用于上传的 Swift 3 base64 编码图像【英文标题】:Swift 3 base64 encode image for upload 【发布时间】:2016-09-11 23:08:50 【问题描述】:

我有一些不错的代码,可以让我拍照和图像,然后在应用程序中显示。我还将 profilePic.image 上传到我的数据库(作为一个 blob),但我意识到这实际上并不是在上传图像本身,而只是关于图像的数据,所以我无法渲染任何东西,因为没有什么可以解码。所以我想转换这个函数来获取选择的图像并将其编码为base64并利用相同的工作上传

func imagePickerController(
        _ selectImage: UIImagePickerController,
        didFinishPickingMediaWithInfo info: [String : AnyObject])
    
        let chosenImage = info[UIImagePickerControllerEditedImage] as! UIImage //2
        // imageByCroppingToRect()
        profilePic.contentMode = .scaleAspectFit //3
        profilePic.image = chosenImage //4
        dismiss(animated: true, completion: nil) //5
    

【问题讨论】:

【参考方案1】:

您必须将UIImage 转换为您的网站可以读取的格式,例如使用 base 64 编码之前的 jpeg。

let jpegCompressionQuality: CGFloat = 0.9 // Set this to whatever suits your purpose
if let base64String = UIImageJPEGRepresentation(chosenImage, jpegCompressionQuality)?.base64EncodedString() 
    // Upload base64String to your database

注意:在 ios 12 中 UIImageJPEGRepresentation 被 UIImage 的实例方法 jpegData 替换:

let jpegCompressionQuality: CGFloat = 0.9 // Set this to whatever suits your purpose
if let base64String = chosenImage.jpegData(compressionQuality: jpegCompressionQuality)?.base64EncodedString() 
    // Upload base64String to your database

请参阅 Apple 文档以了解 UIImageJPEGRepresentation 和 Data

【讨论】:

【参考方案2】:

Data 有一个函数可以将自身的 base64 表示返回为另一个 Data。无需转换为String 并返回。

查看Data.base64EncodedData() 的文档

if let data = UIImageJPEGRepresentation(photos, 0.5)?.base64EncodedData() 
    form.append(data, withName: "images", fileName: "photo.jpeg", mimeType: "image/jpeg")

【讨论】:

以上是关于用于上传的 Swift 3 base64 编码图像的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 3 中从 Base64 编码的字符串创建图像? [复制]

Swift 中的 Base64 编码不会在 Android 中解码

如何在 Swift 3 中将 captureStillImageAsynchronously(sampleBuffer) 转换为 base64 编码

使用 Alamofire 上传具有 base64String 编码的多个图像的数组

如何仅使用 JavaScript 将 base64 编码的图像数据上传到 S3?

在 laravel 中解码和移动 base64 编码的图像