2011-08-22 17 views
19

Leo en la referencia que desde la versión iOS 4. + con el método imageNamed del objeto UIImage, la extensión de archivo no es necesaria.imagen JPG no se carga con UIImage imageNamed

De UIImage referencia de clase:

Consideraciones especiales.

En iOS 4 y posterior, el nombre del archivo no es necesario para especificar la extensión de nombre de archivo. Antes de iOS 4, debe especificar la extensión de nombre de archivo .

Pero parece que esto solo funciona con archivos PNG.

Si mi código es:

[UIImage imageNamed:@"test"]; 
  • La imagen se carga sólo si el archivo es test.png
  • La imagen no se carga si es test.jpg.

Para mí es un gran problema porque tengo que mantener una carga dinámica de la imagen (no sé en tiempo de ejecución si la imagen que quiero cargar es png o jpg).

¿Me puede ayudar?
Gracias.

+0

¿Alguna de las respuestas lo ayudó? –

Respuesta

0

Si tiene estas imágenes incluidas en su aplicación, DEBERÍA conocer sus extensiones.

Si los obtiene de una fuente en línea y los tiene como NSData, puede usar este código aquí para determinar el 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; 
} 

De acuerdo con la respuesta más común en this cuestión.

2

Los últimos estados de referencia desarrollador de la pieza que falta de la información:

Consideraciones especiales En iOS 4 y posteriores, si el archivo está en formato PNG, no es necesario especificar la extensión de archivo PNG. Antes de iOS 4, debe especificar la extensión del nombre de archivo.

Una razón posible de que la biblioteca ofrezca un trato especial a PNG es que el hardware de iOS está optimizado para PNG. Las imágenes PNG almacenadas en el paquete de aplicaciones están optimizadas por Xcode, cambiando el orden de bytes de las imágenes PNG para que coincida con el chip gráfico del dispositivo iPhone. (vea esta pregunta: Is PNG preferred over JPEG for all image files on iOS?).

Si sabe que solo tendrá un PNG o un JPG, una solución alternativa es crear una categoría en UIImage como se muestra a continuación.

- (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; 
} 
Cuestiones relacionadas