我想将图像上传到解析服务器。 PFFile
最多只能为10mb,所以我写了一个类别来检查UIImage
字节大小是否超过了这个类别。
这是我的类别中的代码:
- (UIImage *)scaleImageToSize:(CGFloat)destSize{
UIImage *img = self;
NSData *imgData = UIImageJPEGRepresentation(img, 1.0);
NSLog(@"size: %lu", (unsigned long)[imgData length]);
while ([imgData length] > destSize) {
UIImageJPEGRepresentation(img, 0.9);
NSLog(@"new size: %lu",(unsigned long)[imgData length]);
}
return img;
}
然而,当我致电[image scaleImageToSize:10485760];
时。它的大部分时间都比那个小。
然而,在运行以下行之后:
photoFile = [PFFile fileWithData:UIImagePNGRepresentation(image)];
[photoFile fileSize]
突然超过10485760
。怎么可能?如果照片成为PFFile
后,我该如何防止照片过大?
答案 0 :(得分:5)
您的scaleImageToSize没有任何意义 - 除了为您提供有关jpeg大小的一些信息。如果你想存储图像并且它比jpeg少10MB,那么将它存储为jpeg而不是png。
所以试试这个
photoFile = [PFFile fileWithData: UIImageJPEGRepresentation(image, 1.0)];
我猜这是你真正想要的
photoFile = [PFFile fileWithData:[self scaleImageToSize(10485760)]];
- (NSData *)scaleImageToSize:(CGFloat)destSize
{
UIImage *img = self;
CGFloat compress = 1.0;
NSData *imgData = UIImageJPEGRepresentation(img, compress);
NSLog(@"size: %lu", (unsigned long)[imgData length]);
while ([imgData length] > destSize) {
compress -= .05;
imgData = UIImageJPEGRepresentation(img, compress);
NSLog(@"new size: %lu",(unsigned long)[imgData length]);
}
return imgData;
}
这可能很慢,所以你可能想在主线程的一个区块中这样做。