2011-06-30 11 views
8

En una aplicación de iOS, necesito proporcionar filtros de imagen según su tamaño (ancho/alto), piense en algo similar a "Grande, Mediano, Pequeño" en la búsqueda de imágenes de Google. . Abrir cada imagen y leer sus dimensiones al crear la lista supondría un gran rendimiento. ¿Hay alguna manera de obtener esta información sin abrir la imagen?iOS: cómo obtener las dimensiones de la imagen sin abrirlo

Damien DeVille respondió a la pregunta de abajo, sobre la base de su sugerencia, ahora estoy utilizando el siguiente código:

NSURL *imageURL = [NSURL fileURLWithPath:imagePath]; 
if (imageURL == nil) 
    return; 

CGImageSourceRef imageSourceRef = CGImageSourceCreateWithURL((CFURLRef)imageURL, NULL); 
if(imageSourceRef == NULL) 
    return; 

CFDictionaryRef props = CGImageSourceCopyPropertiesAtIndex(imageSourceRef, 0, NULL);  
CFRelease(imageSourceRef); 

NSLog(@"%@", (NSDictionary *)props); 

CFRelease(props); 
+0

¿Qué pasa con el voto negativo? –

+0

ni idea, el chico que originalmente había respondido la pregunta no entendía la pregunta en absoluto y estaba siendo ofensivo, por lo que le informé sobre mods SO. puede ser que se haya vengado de mí ;-) –

Respuesta

9

Puede utilizar ImageIO para lograrlo.

Si tiene su URL de imagen (o desde una ruta de archivo cree una URL con + fileURLWithPath en NSURL) puede crear una fuente de imagen con CGImageSourceCreateWithURL (deberá puentear la URL a CFURLRef).

Una vez que tenga el origen de la imagen, puede obtener un CFDictionaryRef de propiedades de la imagen (que puede volver a unir de forma conjunta a NSDictionary) llamando a CGImageSourceCopyPropertiesAtIndex. Lo que obtienes es un diccionario con muchas propiedades sobre la imagen, incluidos pixelHeight y pixelWidth.

Puede pasar 0 como índice. El índice se debe a que algunas imágenes pueden tener varias imágenes incrustadas (como una miniatura o varios cuadros como en un gif).

Tenga en cuenta que al usar una fuente de imagen, no será necesario cargar la imagen completa en la memoria, pero aún podrá acceder a sus propiedades.

Hacer que importar y agregar el marco de su proyecto.

+3

gracias, funciona bien, he editado mi pregunta para incluir el código que utilicé, por las dudas. –

0

Sólo una adición: si desea utilizar la web URL como http://www.example.com/image.jpg se debe utilizar entonces [NSURL URLWithString: imagePath] en lugar [NSURL fileURLWithPath: imagePath].

Cuestiones relacionadas