将UIImage转换为PFFile会产生巨大的文件

时间:2015-01-21 22:50:50

标签: ios objective-c parse-platform uiimage

我想将图像上传到解析服务器。 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后,我该如何防止照片过大?

1 个答案:

答案 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;
}

这可能很慢,所以你可能想在主线程的一个区块中这样做。