无法在iOS App上找出文件大小

时间:2017-07-18 20:47:57

标签: ios objective-c iphone xcode image

我一直在检查我通过StackOverflow找到的不同解决方案,但遗憾的是我找不到解决这个问题的方法。我基本上需要找到存储在iPhone图库中的图像的大小(以字节为单位,Kb或其他)。实际上,我需要在将其上传到服务器之前验证大小。

所以,我从互联网上拍了一张JPEG图像:

http://static1.uk.businessinsider.com/image/596c82d34af3fa51058b4978-707/david%20slater.jpeg

我将其下载到计算机后,当我收到文件信息时说: 大小为80865字节(磁盘上为82 KB)。所以,我把这个文件保存到iPhone的图像库中。一旦我从图库中获取图像并通过xCode进行检查,我会看到以下内容:

xcode picture and info from file

所以,基本上该文件在我的计算机磁盘上有80865个字节,但是当我通过xcode检查它时它有289371(来自NSData对象的方法长度返回'数据对象包含的字节数',根据文件)。我错过了什么吗?为什么iPhone磁盘内的图像几乎是iPhone中存储图像大小的4倍?

我使用的代码是:

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    NSUInteger  length = [UIImageJPEGRepresentation(image,1.0f) length];
}

编辑:好的,所以我已经更改了代码,先将图像保存到磁盘然后查看大小,我使用:

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    UIImage     *image = [info objectForKey:UIImagePickerControllerEditedImage];
    NSArray     *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString    *filePath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"Image.png"];
    [UIImageJPEGRepresentation(image,1.0f) writeToFile:filePath atomically:YES];

    NSError     *attributesError;
    NSDictionary*fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:&attributesError];
    NSNumber    *fileSizeNumber = [fileAttributes objectForKey:NSFileSize];
}

所以,如果我打印变量fileSizeNumber的值,我得到:369055(根据文档指出文件的大小,以字节为单位)。但这个数字似乎与原来的80865不匹配,实际上比原始图像大10倍!

1 个答案:

答案 0 :(得分:1)

  

[UIImagePNGRepresentation(image) writeToFile:filePath atomically:YES];

您正在将未压缩的数据(或至少不同的压缩数据)写入文件,然后检查其长度。但JPEG文件格式的重点是压缩数据。读取JPEG图像,将其作为PNG数据写入文件,然后查看该文件的长度并不能告诉您想要的内容,这并不奇怪。

我不确定为什么你不相信Xcode告诉你什么,但是如果你觉得想要看到JPEG图像处于压缩状态的实际大小,你需要找到JPEG文件本身。你会做类似的事情:

[[NSBundle mainBundle] pathForResource:@"selfie" ofType:@"jpeg"];

获取文件的路径,然后使用NSFileManager查看该路径中文件的属性。