我正试图在手机上直接拍照后将图像文件上传到Parse . 但它引发了一个例外:
由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:'PFFile不能大于10485760字节'
这是我的代码:
在第一个视图控制器:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if (segue.identifier == "getImage")
{
var svc = segue.destinationViewController as! ClothesDetail
svc.imagePassed = imageView.image
}
}
在上传图像的视图控制器中:
let imageData = UIImagePNGRepresentation(imagePassed)
let imageFile = PFFile(name: "\(picName).png", data: imageData)
var userpic = PFObject(className:"UserPic")
userpic["picImage"] = imageFile`
但我仍然需要将该照片上传到Parse . 有没有办法减小图像的大小或分辨率?
9 回答
是的,您可以使用
UIImageJPEGRepresentation
而不是UIImagePNGRepresentation
来缩小图像文件大小 . 您可以按如下方式创建扩展UIImage:Xcode 8.2 • Swift 3.0.2
编辑/更新:
Xcode 10 Swift 4.2
用法:
如果你想将图像的大小限制为一些具体的值,你可以这样做:
Jus Fixing for Xcode 7,于2015年9月21日测试并正常工作:
只需创建一个扩展
UIImage
,如下所示:然后你可以像这样使用它:
这是非常简单的
UIImage
扩展名使用
在Swift 4中,我创建了这个扩展,它将获得预期的大小以尝试到达它 .
使用
Swift 4 Binary Approach 压缩图像
我认为回答这个问题已经很晚了但是这里是我对优化问题的解决方案我正在使用_1139838来找到最佳值 . 因此,例如,通过正常减法方法达到62%将需要38次压缩尝试,*二进制搜索**方法将达到最大日志(100)=大约7次尝试所需的解决方案 .
但是,还要通知您
UIImageJPEGRepresentation
函数的行为不是线性的,特别是当数字达到接近1.这是屏幕抓取,我们可以看到图像在浮点值> 0.995后停止压缩 . 这种行为是非常不可预测的,所以最好有一个delta缓冲区来处理这种情况 .这是它的代码
Swift 3
@ leo-dabus回答修订为swift 3
In Swift