Estoy probando mi aplicación de iPhone en un iPhone iOS 3.1.3. Estoy seleccionando / capturando una imagen usando 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;
}
Luego, en algún momento, lo envío a mi servidor web utilizando las clases 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];
El problema: cuando tomo una foto con el iPhone mientras lo mantengo horizontal, la imagen se carga en el servidor y se ve como es de esperar. al tomar una foto con el teléfono en vertical, la imagen se carga y se ve como se había girado 90 grados.
mi aplicación está configurada para funcionar solo en modo vertical (al revés y regular).
¿Cómo puedo hacer que la imagen muestre siempre la orientación correcta después de cargarla?
la imagen parece ser correcta como se muestra en un UIImageView (directamente después de tomar la foto), pero ver en el servidor dice lo contrario.
Descubrí uno mucho más simple:
Por cierto: el código de @ Anomie no tiene
scale
en cuenta, por lo que no funcionará para 2x imágenes.fuente
self
con su objeto UIImage.Aquí hay una versión rápida de la respuesta de @ an0:
También en una función más general:
Versión Swift 3:
fuente
Solución para Swift 3.1 para problemas de orientación al capturar la imagen de la cámara.
He actualizado la solución dada por Jake y Metal Heart
UIImage extension
Swift 2.0
Uso de esta extensión UIImage en su código:
let fixOrientationImage = chosenImage.fixOrientation ()
coloque esto en sus métodos delegados de selector de imagen como este
Swift 3.1
Swift 2.0
fuente
en rápido;)
ACTUALIZACIÓN SWIFT 3.0: D
fuente
La versión de Swift 4.x / 5.0 de
@an0
la solución:fuente
Usé esta página cuando diseñé mi aplicación que toma fotos y descubrí que el siguiente método corregirá la orientación y usará menos memoria y procesador que las respuestas anteriores:
Básicamente, esto solo vuelve a envolver los datos de la imagen real con una nueva orientación. Estaba usando el código de @ an0 pero crea una nueva imagen en la memoria que puede gravar una imagen de 3264x2448 que podría obtener de una cámara.
fuente
Si habilita la edición, la imagen editada (a diferencia del original) estará orientada como se esperaba:
Al habilitar la edición, el usuario puede cambiar el tamaño y mover la imagen antes de tocar "Usar foto"
fuente
Esto es lo que he encontrado para solucionar el problema de orientación
EDITAR:
fuente
Actualización para Swift 3.1 basada en
Sourabh Sharma
la respuesta de, con limpieza de código.Ejemplo de método de delegado de selector:
fuente
Aquí hay una solución que no cambia el espacio de color de la imagen original. Si desea normalizar la orientación de una imagen en escala de grises, no tiene suerte con todas las soluciones basadas
UIGraphicsBeginImageContextWithOptions
porque crea un contexto en el espacio de color RGB. En su lugar, debe crear un contexto con las mismas propiedades que la imagen original y dibujar:fuente
Aquí está la extensión UIImage para swift:
Basado en el trabajo anterior de MetalHeart2003.
fuente
Aquí hay una extensión UIImage en Swift 2 basada en la respuesta aceptada por @Anomie. Utiliza una caja de interruptor más clara. También toma
CGBitmapContextCreateImage()
en consideración el valor opcional devuelto por .fuente
He experimentado este problema con imágenes tomadas de la cámara o guardadas en el rollo de la cámara que se toman de la cámara. Las imágenes descargadas en la biblioteca de fotos desde el navegador Safari no giran cuando se cargan.
Pude resolver este problema haciendo que los datos de la imagen fueran JPEG antes de subirlos.
Ahora podemos usar los datos para cargar y la imagen no se rotará después de la carga.
Espero que esto funcione.
fuente
Lo logro escribiendo debajo de algunas líneas de código
fuente
Si entiendo, ¿qué quieres hacer es ignorar la orientación del UIImage? Si es así, podrías hacer esto:
o en Swift: -
Resolvió mi problema de cultivo ... Espero, esto es lo que estás buscando ...
fuente
Versión de Swift 3 basada en @ jake1981 que la tomó de @ MetalHeart2003
fuente
fuente
Aquí está el código Swift-4.2 para corregir automáticamente la orientación de su imagen Devuelve UIImage
fuente
Transpuse esto a Xamarin:
fuente