JPG图像不会加载UIImage imageNamed
我从iOS版本4 +与UIImage
对象的方法imageNamed
的参考阅读,文件扩展名不是必需的。
从UIImage
类参考:
特别注意事项。
在iOS 4及更高版本中,文件的名称不需要指定文件扩展名。 在iOS 4之前,您必须指定文件扩展名。
但是,这似乎只适用于PNG文件。
如果我的代码是:
[UIImage imageNamed:@"test"];
- 只有在文件是
test.png
才会加载图像 - 如果是
test.jpg
,图片不会加载。
对我来说,这是一个大问题,因为我需要保持一个dynamic图像加载(我不知道在运行时如果我想加载的图像是png
或jpg
png
)。
请你帮帮我吗?
谢谢。
最新的开发人员参考指出缺less的信息:
特殊注意事项在iOS 4和更高版本中,如果文件是PNG格式,则不需要指定.PNG文件扩展名。 在iOS 4之前,您必须指定文件扩展名。
图书馆给予PNG特殊待遇的一个可能原因是iOS硬件针对PNG进行了优化。 存储在应用程序包中的PNG图像通过Xcode优化,改变PNG图像的字节顺序以匹配iPhone设备的graphics芯片。 (看到这个问题: 对于iOS上的所有图像文件,PNG是否优先于JPEG? )。
如果你知道你只有一个PNG或一个JPG,另一种解决scheme是在UIImage上创build一个类别,如下所示。
- (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,你可以在这里使用这个代码来确定types。
+ (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; }
按照这个问题的答案。