[英]JPG image doesn't load with UIImage imageNamed
我在iOS版本4 +上使用方法imageNamed
為UIImage
對象的參考文獻中讀到,不需要文件擴展名。
從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.