2011-08-22 29 views
19

我從iOS版本4的參考資料中讀到+與方法imageNamedUIImage對象,文件擴展名不是必需的。JPG圖像不與UIImage一起加載imageNamed

UIImage類參考:

特別注意事項。

在iOS 4及更高版本中,文件的名稱不需要指定 的文件擴展名。在iOS 4之前,您必須指定文件名 擴展名。

但它似乎只適用於PNG文件。

如果我的代碼是:只有

[UIImage imageNamed:@"test"]; 
  • 圖像加載該文件是否test.png
  • 的圖像,如果它test.jpg不會加載。

對我來說這是一個很大的問題,因爲我需要保持一個動態的圖像加載(我不知道在運行時,如果我想加載圖像pngjpg)。

請幫助我嗎?
謝謝。

+0

有沒有任何答案對您有幫助? –

回答

0

如果您將這些圖像捆綁在您的應用中,您應該知道它們的擴展名。

如果你從一個在線資源中獲取它們並將它們作爲NSData,那麼可以在這裏使用此代碼來確定類型。

+ (NSString *)contentTypeForImageData:(NSData *)data { 
    uint8_t c; 
    [data getBytes:&c length:1]; 

    switch (c) { 
    case 0xFF: 
     return @"image/jpeg"; 
    case 0x89: 
     return @"image/png"; 
    case 0x47: 
     return @"image/gif"; 
    case 0x49: 
    case 0x4D: 
     return @"image/tiff"; 
    } 
    return nil; 
} 

按照this問題的最佳答案。

2

最新的開發者參考國家缺少的一條信息:

特別注意事項 在iOS 4及更高版本,如果文件是PNG格式,無需指定。PNG文件擴展名。在iOS 4之前,您必須指定文件擴展名。

該庫給PNG特殊待遇的一個可能原因是iOS硬件針對PNG進行了優化。存儲在應用程序包中的PNG圖像通過Xcode進行優化,更改PNG圖像的字節順序以匹配iPhone設備的圖形芯片。 (請參閱此問題:Is PNG preferred over JPEG for all image files on iOS?)。

如果你知道你只有一個PNG或JPG,另一種解決方案是在UIImage上創建一個類別,如下所示。

- (UIImage*) jgcLoadPNGorJPGImageWithName:(NSString*)name { 
    UIImage * value; 
    if (nil != name) { 
     value = [UIImage imageNamed:name]; 
     if (nil == value) { 
      NSString * jpgName = [NSString stringWithFormat:@"%@.jpg", name]; 
      value = [UIImage imageNamed:jpgName]; 
     } 
    } 
    return value; 
}