Je teste mon application iPhone sur un iPhone iOS 3.1.3. Je sélectionne / capture une image en utilisant UIImagePickerController
:
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
[imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
[imagePicker setDelegate:self];
[self.navigationController presentModalViewController:imagePicker animated:YES];
[imagePicker release];
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
self.image = [info objectForKey:UIImagePickerControllerOriginalImage];
imageView.image = self.image;
[self.navigationController dismissModalViewControllerAnimated:YES];
submitButton.enabled = YES;
}
Je l'envoie ensuite à un moment donné à mon serveur Web en utilisant les classes ASI:
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:@"http://example.com/myscript.php"]];
[request setDelegate:self];
[request setStringEncoding:NSUTF8StringEncoding];
[request setShouldContinueWhenAppEntersBackground:YES];
//other post keys/values
[request setFile:UIImageJPEGRepresentation(self.image, 100.0f) withFileName:[NSString stringWithFormat:@"%d.jpg", [[NSDate date] timeIntervalSinceNow]] andContentType:@"image/jpg" forKey:@"imageFile"];
[request startAsynchronous];
le problème: lorsque je prends une photo avec l'iphone en le tenant en mode paysage, l'image est téléchargée sur le serveur et affichée comme vous vous y attendez. lorsque vous prenez une photo en tenant le téléphone en mode portrait, l'image est téléchargée et affichée telle qu'elle avait été pivotée de 90 degrés.
mon application est configurée pour fonctionner uniquement en mode portrait (inversé et normal).
Comment puis-je faire en sorte que l'image montre toujours l'orientation correcte après le téléchargement?
l'image semble être correcte comme affichée dans un UIImageView (directement après avoir pris la photo), mais la visualisation sur le serveur dit le contraire.
J'en ai trouvé une bien plus simple:
BTW: Le code @ Anomie ne prend pas
scale
en compte, donc ne fonctionnera pas pour les images 2x.la source
self
par votre objet UIImage.Voici une version Swift de la réponse de @ an0:
Également dans une fonction plus générale:
Version Swift 3:
la source
Solution pour Swift 3.1 pour le problème d'orientation lors de la capture de l'image à partir de la caméra.
J'ai mis à jour la solution proposée par jake et Metal Heart
Extension UIImage
Swift 2.0
Utilisation de cette extension UIImage dans votre code:
laissez fixOrientationImage = selectedImage.fixOrientation ()
placez cela dans vos méthodes déléguées de sélecteur d'images comme celui-ci
Swift 3.1
Swift 2.0
la source
en rapide;)
MISE À JOUR SWIFT 3.0: D
la source
Version Swift 4.x / 5.0 de
@an0
la solution de:la source
J'ai utilisé cette page lors de la conception de mon application qui prend des photos et j'ai constaté que la méthode suivante corrigera l'orientation et utilisera moins de mémoire et de processeur que les réponses précédentes:
Cela recompose simplement les données d'image réelles avec une nouvelle orientation. J'utilisais le code de @ an0 mais cela crée une nouvelle image en mémoire qui peut être taxée sur une image 3264x2448 que vous pourriez obtenir d'un appareil photo.
la source
Si vous activez l'édition, l'image éditée (par opposition à l'original) sera orientée comme prévu:
L'activation de l'édition permet à l'utilisateur de redimensionner et de déplacer l'image avant de toucher «Utiliser la photo»
la source
Voici ce que j'ai trouvé pour résoudre le problème d'orientation
ÉDITER:
la source
Mise à jour pour Swift 3.1 basée sur
Sourabh Sharma
la réponse de, avec nettoyage du code.Exemple de méthode de délégué de sélecteur:
la source
Voici une solution qui ne modifie pas l'espace colorimétrique de l'image d'origine. Si vous souhaitez normaliser l'orientation d'une image en niveaux de gris, vous n'avez pas de chance avec toutes les solutions basées sur,
UIGraphicsBeginImageContextWithOptions
car cela crée un contexte dans l'espace colorimétrique RVB. Au lieu de cela, vous devez créer un contexte avec les mêmes propriétés que l'image d'origine et dessiner:la source
Voici l'extension UIImage pour swift:
Basé sur les travaux antérieurs de MetalHeart2003.
la source
Voici une extension UIImage dans Swift 2 basée sur la réponse acceptée par @Anomie. Il utilise un boîtier de commutateur plus clair. Il prend également
CGBitmapContextCreateImage()
en considération la valeur facultative renvoyée par .la source
J'ai rencontré ce problème avec des images prises depuis l'appareil photo ou enregistrées dans la pellicule qui sont prises depuis l'appareil photo. Les images téléchargées dans la photothèque à partir du navigateur Safari ne tournent pas lors du téléchargement.
J'ai pu résoudre ce problème en créant les données d'image au format JPEG avant de les télécharger.
Nous pouvons maintenant utiliser les données pour le téléchargement et l'image ne sera pas pivotée après le téléchargement.
J'espère que cela fonctionnera.
la source
J'y parviens en écrivant ci-dessous quelques lignes de code
la source
Si je comprends bien, ce que vous voulez faire, c'est ignorer l'orientation de l'UIImage? Si oui, alors vous pouvez le faire: -
ou en Swift: -
Cela a résolu mon problème de recadrage. J'espère que c'est ce que vous recherchez.
la source
Version Swift 3 basée sur @ jake1981 qui l'a empruntée à @ MetalHeart2003
la source
la source
Voici le code Swift-4.2 pour corriger automatiquement l'orientation de votre image. Retourne UIImage
la source
J'ai transposé ceci dans Xamarin:
la source