JPG图像不会加载UIImage imageNamed

时间:2011-08-22 14:18:49

标签: ios uiimage imagenamed

我在iOS版本4. +上使用imageNamed对象的方法UIImage阅读了参考资料,不需要文件扩展名。

来自UIImage班级参考:

  

特别注意事项。

     

在iOS 4及更高版本中,无需指定文件名   文件扩展名。在iOS 4之前,您必须指定文件名   扩展

但似乎这只适用于PNG文件。

如果我的代码是:

[UIImage imageNamed:@"test"];
  • 仅当文件为test.png
  • 时才加载图片
  • 如果图片为test.jpg,则不会加载图片。

对我来说这是一个很大的问题,因为我需要维护一个动态图像加载(我不知道在运行时我想加载的图像是png还是jpg)。

请你能帮帮我吗? 感谢。

2 个答案:

答案 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问题中的最佳答案。