Comme d'iOS 4.0, le SDK iOS inclut le CGImageSource...
functions (dans le cadre ImageIO). C'est une API très flexible pour interroger les métadonnées sans charger l'image dans la mémoire. Obtenir les dimensions en pixels d'une image devrait fonctionner comme ceci (assurez-vous d'inclure le ImageIO.framework dans votre cible):
#import <ImageIO/ImageIO.h>
NSURL *imageFileURL = [NSURL fileURLWithPath:...];
CGImageSourceRef imageSource = CGImageSourceCreateWithURL((CFURLRef)imageFileURL, NULL);
if (imageSource == NULL) {
// Error loading image
...
return;
}
CGFloat width = 0.0f, height = 0.0f;
CFDictionaryRef imageProperties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, NULL);
CFRelease(imageSource);
if (imageProperties != NULL) {
CFNumberRef widthNum = CFDictionaryGetValue(imageProperties, kCGImagePropertyPixelWidth);
if (widthNum != NULL) {
CFNumberGetValue(widthNum, kCFNumberCGFloatType, &width);
}
CFNumberRef heightNum = CFDictionaryGetValue(imageProperties, kCGImagePropertyPixelHeight);
if (heightNum != NULL) {
CFNumberGetValue(heightNum, kCFNumberCGFloatType, &height);
}
// Check orientation and flip size if required
CFNumberRef orientationNum = CFDictionaryGetValue(imageProperties, kCGImagePropertyOrientation);
if (orientationNum != NULL) {
int orientation;
CFNumberGetValue(orientationNum, kCFNumberIntType, &orientation);
if (orientation > 4) {
CGFloat temp = width;
width = height;
height = temp;
}
}
CFRelease(imageProperties);
}
NSLog(@"Image dimensions: %.0f x %.0f px", width, height);
(adapté de « Programmation avec Quartz » par Gelphman et Laden, la liste 9.5, à la page 228)
Ceci est une bonne question. Android fournit un moyen de le faire, mais je ne connais pas de solution iOS. EDIT: Cela a déjà été demandé. http://stackoverflow.com/questions/1551300/get-size-of-image-without-loading-in-to-memory – Justin
J'ai cherché avant, mais je ne pouvais pas le trouver! Merci beaucoup! – koda