我在iOS版本4. +上使用imageNamed
对象的方法UIImage
阅读了参考资料,不需要文件扩展名。
来自UIImage
班级参考:
特别注意事项。
在iOS 4及更高版本中,无需指定文件名 文件扩展名。在iOS 4之前,您必须指定文件名 扩展
但似乎这只适用于PNG文件。
如果我的代码是:
[UIImage imageNamed:@"test"];
test.png
test.jpg
,则不会加载图片。对我来说这是一个很大的问题,因为我需要维护一个动态图像加载(我不知道在运行时我想加载的图像是png
还是jpg
)。
请你能帮帮我吗? 感谢。
答案 0 :(得分:3)
最新的开发人员参考说明了缺失的信息:
特别注意事项 在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;
}
答案 1 :(得分: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问题中的最佳答案。