21 votes

Détecter si une image UIImage est PNG ou JPEG ?

Je fais actuellement mes premiers pas dans le développement de l'iPhone avec MonoTouch. UIImage que je lis depuis la photothèque.

Ce que je veux réaliser, c'est obtenir le tableau brut d'octets ( byte[] ) de l'image.

Je sais qu'il y a les UIImageJPEGRepresentation y UIImagePNGRepresentation dans MonoTouch. Je sais aussi comment les utiliser. Ce que je ne sais pas, c'est :

Comment décider laquelle de ces deux fonctions appeler ?

Par exemple, si l'image originale est une image JPEG, je ne veux pas l'obtenir en PNG mais aussi en JPEG, et vice versa.

Y a-t-il un moyen de faire cela, ou est-ce que je manque des points sur ce sujet ?

31voto

bryanmac Points 22834

Une fois que vous avez un UIImage il est capable de produire un JPEG ou un PNG à l'aide de l'option UIImageJPEGRepresentation o UIImagePNGRepresentation . Le format de l'image originale n'a d'importance que lorsque l'UIImage est créé à partir de celle-ci (il décide de l'identité de l'utilisateur). CFImage pour le charger).

S'il est important pour votre application ou votre algorithme de s'assurer que vous l'enregistrez dans le format original, je pense que vous devez conserver cette information pour l'utiliser lorsque vous l'écrivez. J'ai vérifié deux fois et je n'ai rien trouvé qui indiquait de quel format il provenait.

Allez-vous changer l'image par UIImageView ou l'image reste-t-elle inchangée dans votre expérience ? Si elle n'est pas modifiée et que vous avez juste besoin de l'interface utilisateur pour sélectionner l'image, pourriez-vous obtenir des octets de fichier ? Par exemple, si vous montrez les images juste pour les sélectionner et qu'ensuite vous les téléchargez sur un serveur ou autre, les octets de fichier ne sont pas disponibles. UIImage ne pourrait servir qu'à l'affichage et à la sélection et si votre structure de données se souvient du fichier d'où elle provient, vous pourriez récupérer les morceaux sur le disque et les télécharger. Si vous modifiez le fichier dans la vue, c'est à vous ou à l'utilisateur de décider de la sortie (et de la qualité en jpeg) de l'image.

0voto

iAleksandr Points 526

PRÉPARER

typedef NS_ENUM(NSInteger, DownloadImageType) {
    DownloadImageTypePng,
    DownloadImageTypeJpg
};

@property (assign, nonatomic) DownloadImageType imageType;

DETECT

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

    NSString *compareString = [[info objectForKey:UIImagePickerControllerReferenceURL] absoluteString];
    NSRange pngRange = [compareString rangeOfString:@"PNG" options:NSBackwardsSearch];
    if (pngRange.location != NSNotFound) {
        compareString = [compareString substringFromIndex:pngRange.location];
        self.imageType = DownloadImageTypePng;
        NSLog(@"%@", compareString);
    } else {
        NSLog(@"Not PNG");
    }

    NSRange jpgRange = [compareString rangeOfString:@"JPG" options:NSBackwardsSearch];
    if (jpgRange.location != NSNotFound) {
        compareString = [compareString substringFromIndex:jpgRange.location];
        self.imageType = DownloadImageTypeJpg;
        NSLog(@"%@", compareString);
    } else {
        NSLog(@"Not JPG");
    }

}

UTILISER

if (self.imageType == DownloadImageTypePng) {

} else if (self.imageType == DownloadImageTypeJpg) {

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X