将 UIImage 转换为 PFFile 会产生巨大的文件
Converting UIImage to PFFile results in huge file
我想将图像上传到解析服务器。 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 没有任何意义。如果你想存储图像并且它小于 10MB 为 jpeg,那么将它存储为 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;
}
这可能会很慢,因此您可能希望在主线程之外的一个块中执行此操作。
我想将图像上传到解析服务器。 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 没有任何意义。如果你想存储图像并且它小于 10MB 为 jpeg,那么将它存储为 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;
}
这可能会很慢,因此您可能希望在主线程之外的一个块中执行此操作。