【问题标题】:Can't figure out file size on iOS App无法确定 iOS 应用程序上的文件大小
【发布时间】:2017-07-19 05:37:18
【问题描述】:

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

所以,我从网上拍了一张 JPEG 图片:

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

一旦我把它下载到我的电脑上,当我得到文件信息时,它会说: 大小 80865 字节(磁盘上 82 KB)。因此,我将此文件保存到 iPhone 的图像库中。从图库中获取图像并通过 xCode 检查后,我会看到以下内容:

所以,基本上该文件在我的计算机磁盘上时有 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倍!

【问题讨论】:

  • 请将代码作为文本发布在您的问题中,而不是图像。
  • 您打印的大小与磁盘上的文件大小完全无关。它们根本不相关。
  • 我用的代码基本不多,买我加了。 Tjanks @rmaddy
  • 内存中的大小可以并且将不同于磁盘上的大小。先保存到磁盘,然后获取文件大小。

标签: ios objective-c iphone xcode image


【解决方案1】:

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

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

我不知道您为什么不相信 Xcode 告诉您的内容,但如果您想看到压缩状态下 JPEG 图像的实际大小,您需要找到 JPEG 文件本身。你会做这样的事情:

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

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

【讨论】:

  • 问题是图像实际上不在 iPhone 的“磁盘”上,而是在图像库上。我找不到一种可行的方法来获取磁盘上实际文件的实际 URL,而且在 iOS 限制的上下文中它实际上似乎是有意义的。
  • 我已将我的问题代码从 PNG 更新为 JPEG,尽管如此,我仍会继续询问。似乎仍然不匹配。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-26
  • 2018-06-26
  • 1970-01-01
  • 1970-01-01
  • 2012-01-11
相关资源
最近更新 更多