以编程方式确定包中图像文件的尺寸

问题描述:

我的iphone应用程序包(〜3000)中有大量图像文件,我想在运行时确定尺寸,而不是将此数据存储在数据库或xml清单中图像。以编程方式确定包中图像文件的尺寸

有没有办法以编程方式做到这一点?

UIImage具有返回图片尺寸的size属性,但我不建议在您的iPhone应用程序中加载所有3000张图片。在构建时预先生成这些信息会给你带来更好的结果。如果没有,你可能会使用某种命名约定来对图像进行编码,然后将这些信息存储在某种数据库或XML文件中,这实际上没有什么区别;)

file Unix实用程序使用文件头信息来确定大小。它基本上需要在文件的第一个块中加载并筛选信息(根据文件类型而有所不同,但大概只有一个实现,因为您控制图像)。

从iOS 4开始,可以在不实际加载内存中的图像的情况下访问图像属性。

你需要ImageIO.framework#进口<的ImageIO/ImageIO.h>

NSURL *imageFileURL = [NSURL fileURLWithPath:imagePath]; 

CGImageSourceRef imageSource = CGImageSourceCreateWithURL((CFURLRef)imageFileURL, NULL); 

if (imageSource == NULL) 
{ 
    // Error loading image ... 
} 

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithBool:NO], (NSString *)kCGImageSourceShouldCache, nil]; 

CFDictionaryRef imageProperties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, (CFDictionaryRef)options); 

NSNumber *mImageWidth; 

NSNumber *mImageHeight; 

if (imageProperties) 
{ 
    mImageWidth = (NSNumber *)CFDictionaryGetValue(imageProperties, kCGImagePropertyPixelWidth); 

    mImageHeight = (NSNumber *)CFDictionaryGetValue(imageProperties, kCGImagePropertyPixelHeight); 

    CFRelease(imageProperties); 
}