gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 18:31:33 25 4
gpt4 key购买 nike

我想将图像上传到解析服务器。 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 后变得太大?

最佳答案

除了为您提供一些关于 jpeg 大小的信息外,您的 scaleImageToSize 没有任何意义。如果您想将图像存储为 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;
}

这可能会很慢,因此您可能希望在主线程之外的一个 block 中执行此操作。

关于ios - 将 UIImage 转换为 PFFile 会产生巨大的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28078312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com