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

bdv*_*bdv 0 objective-c uiimage ios parse-platform

我想将图像上传到解析服务器.A PFFile最多只能是10mb,所以我写了一个类别来检查UIImagebytesize是否超过了.

这是我的类别中的代码:

- (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;
}
Run Code Online (Sandbox Code Playgroud)

但是,当我打电话[image scaleImageToSize:10485760];.它的大部分时间都小于此.

但是,在运行以下行之后:

photoFile = [PFFile fileWithData:UIImagePNGRepresentation(image)];
Run Code Online (Sandbox Code Playgroud)

[photoFile fileSize]suddently超过10485760.怎么可能?我怎样才能防止照片变得太大PFFile

pds*_*pds 5

您的scaleImageToSize没有任何意义 - 除了为您提供有关jpeg大小的一些信息.如果你想存储图像并且它比jpeg少10MB,那么将它存储为jpeg而不是png.

所以试试这个

photoFile = [PFFile fileWithData: UIImageJPEGRepresentation(image, 1.0)];
Run Code Online (Sandbox Code Playgroud)

我猜这是你真正想要的

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;
}
Run Code Online (Sandbox Code Playgroud)

这可能很慢,因此您可能希望在主线程的块中执行此操作.