2011-08-22 9 views
19

Ho letto sul riferimento che dalla versione iOS 4. + con il metodo imageNamed dell'oggetto UIImage, l'estensione del file non è richiesta.L'immagine JPG non viene caricata con UIImage imageNamed

Da UIImage classe di riferimento:

Considerazioni particolari.

Su iOS 4 e versioni successive, il nome del file non è necessario per specificare l'estensione del nome file. Prima di iOS 4, è necessario specificare l'estensione del file .

Ma sembra che funzioni solo con i file PNG.

Se il mio codice è: solo

[UIImage imageNamed:@"test"]; 
  • I carichi di immagini se il file è test.png
  • L'immagine non viene caricata se è test.jpg.

per me è un grosso problema, perché ho bisogno di mantenere un carico un'immagine dinamica (non so in fase di esecuzione se l'immagine che voglio caricare è png o jpg).

Per favore puoi aiutarmi?
Grazie.

+0

Qualcuno delle risposte ti ha aiutato? –

risposta

0

Se si dispone di queste immagini in bundle nell'app, è necessario conoscere le loro estensioni.

Se li stai ricevendo da una fonte online e li hai come NSData, puoi usare questo codice qui per determinare il tipo.

+ (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; 
} 

Come per la risposta superiore in this domanda.

2

Le ultime rinvio sviluppatore Il pezzo mancante di informazioni:

Considerazioni speciali Su iOS 4 e versioni successive, se il file è in formato PNG, non è necessario specificare l'estensione del file .PNG. Prima di iOS 4, è necessario specificare l'estensione del nome file.

Una possibile ragione per cui la libreria offre un trattamento speciale ai PNG, è che l'hardware iOS è ottimizzato per i PNG. Le immagini PNG memorizzate nel pacchetto di applicazioni sono ottimizzate da Xcode, modificando l'ordine dei byte delle immagini PNG in modo che corrispondano al chip grafico del dispositivo iPhone. (vedi questa domanda: Is PNG preferred over JPEG for all image files on iOS?).

Se si sa che si avrà solo un PNG o un JPG, una soluzione alternativa è quella di creare una categoria su UIImage come di seguito.

- (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; 
} 
Problemi correlati