簡體   English   中英

JPG圖像不會加載UIImage imageNamed

[英]JPG image doesn't load with UIImage imageNamed

我在iOS版本4 +上使用方法imageNamedUIImage對象的參考文獻中讀到,不需要文件擴展名。

UIImage類引用:

特別注意事項。

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

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

如果我的代碼是:

[UIImage imageNamed:@"test"];
  • 僅當文件為test.png時才加載圖像
  • 如果它是test.jpg則圖像不會加載。

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

你能幫幫我嗎?
謝謝。

最新的開發人員參考說明了缺失的信息:

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

庫為PNG提供特殊處理的一個可能原因是iOS硬件針對PNG進行了優化。 存儲在應用程序包中的PNG圖像由Xcode優化,改變PNG圖像的字節順序以匹配iPhone設備的圖形芯片。 (請參閱此問題: 對於iOS上的所有圖像文件,PNG是否優先於JPEG? )。

如果您知道您只有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;
}

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

如果您是從在線源獲取它們並將它們作為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;
}

根據這個問題的最佳答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM