Swift 3 base64编码图像用于上传

时间:2016-09-11 23:08:51

标签: uiimage base64 swift3

我有一些很好的代码,允许我拍照和图像,然后在应用程序中显示它。我还将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
    }

2 个答案:

答案 0 :(得分:9)

您必须将UIImage转换为您的网站可以阅读的格式,例如在基础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文档了解UIImageJPEGRepresentationData

答案 1 :(得分:1)

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")
}