2011-08-22 9 views
19

私は、imageNamedUIImageオブジェクトのiOSバージョン4 +のリファレンスを読みましたが、ファイル拡張子は必要ありません。JPGイメージはUIImage imageとロードされません

特別な考慮事項:UIImageクラス参照から

iOS 4以降では、ファイル名に 拡張子を指定する必要はありません。 iOS 4より前には、ファイル名を と指定する必要があります。

しかし、これはPNGファイルでのみ機能するようです。

私のコードがある場合:

[UIImage imageNamed:@"test"]; 
  • イメージロードファイルは、それがtest.jpgだ場合イメージがロードされないtest.png
  • である場合にのみ。私にとって

私は(私はロードしたい画像がpngjpgであれば、私は、実行時に知っていない)、動的画像の読み込みを維持する必要があるため、それは大きな問題です。

私を助けてください。
ありがとうございます。

+0

回答がありましたらお答えしましたか? –

答えて

0

これらの画像がアプリケーションにバンドルされている場合は、その拡張子を知っているはずです(SHOULD)。

オンラインソースから取得していて、それらを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の質問に答えてください。

2

最新の開発者向けリファレンス状態情報の不足している作品:

特別な考慮事項 のiOS 4には、ファイルがPNG形式である場合、後で、.PNGファイル名の拡張子を指定する必要はありません。 iOS 4より前には、ファイル名の拡張子を指定する必要があります。

ライブラリがPNGに特別な処理を与える理由の1つは、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; 
} 
関連する問題