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