voltear voltea selfies selfie porque modo las invertir imagen girar frontal fotos espejo como camara automaticamente iphone objective-c ios rotation

iphone - voltea - Cómo rotar una imagen 90 grados en iOS?



voltear imagen espejo iphone (10)

Aquí está la versión de Swift 2.2 de la respuesta iOSDev (en la extensión UIImage):

func degreesToRadians(degrees: CGFloat) -> CGFloat { return degrees * CGFloat(M_PI) / 180 } func imageRotatedByDegrees(degrees: CGFloat) -> UIImage { // calculate the size of the rotated view''s containing box for our drawing space let rotatedViewBox = UIView(frame: CGRectMake(0,0,self.size.width, self.size.height)) let t = CGAffineTransformMakeRotation(self.degreesToRadians(degrees)) rotatedViewBox.transform = t let rotatedSize = rotatedViewBox.frame.size // Create the bitmap context UIGraphicsBeginImageContext(rotatedSize) let bitmap = UIGraphicsGetCurrentContext() // Move the origin to the middle of the image so we will rotate and scale around the center. CGContextTranslateCTM(bitmap, rotatedSize.width/2, rotatedSize.height/2); // Now, draw the rotated/scaled image into the context CGContextScaleCTM(bitmap, 1.0, -1.0); CGContextDrawImage(bitmap, CGRectMake(-self.size.width / 2, -self.size.height / 2, self.size.width, self.size.height), self.CGImage); let newImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return newImage; }

Lo que quiero hacer es tomar una instantánea de mi cámara, enviarla a un servidor y luego el servidor me devuelve la imagen en un viewController. Si la imagen está en modo vertical, la imagen aparece bien en la pantalla; sin embargo, si la imagen se tomó en modo horizontal, la imagen aparece estirada en la pantalla (¡mientras intenta aparecer en modo retrato!). No sé cómo solucionar esto, pero supongo que una solución es primero verificar si la imagen está en modo vertical / horizontal y luego, si está en modo horizontal, rotarla 90 grados antes de mostrarla en la pantalla. Entonces, ¿cómo podría hacer eso?


Este es el código completo para la rotación de la imagen en cualquier grado, solo agréguela al archivo apropiado, es decir, en .m, como se muestra a continuación, donde desea utilizar el procesamiento de imágenes.

para .m

@interface UIImage (RotationMethods) - (UIImage *)imageRotatedByDegrees:(CGFloat)degrees; @end @implementation UIImage (RotationMethods) static CGFloat DegreesToRadians(CGFloat degrees) {return degrees * M_PI / 180;}; - (UIImage *)imageRotatedByDegrees:(CGFloat)degrees { // calculate the size of the rotated view''s containing box for our drawing space UIView *rotatedViewBox = [[UIView alloc] initWithFrame:CGRectMake(0,0,self.size.width, self.size.height)]; CGAffineTransform t = CGAffineTransformMakeRotation(DegreesToRadians(degrees)); rotatedViewBox.transform = t; CGSize rotatedSize = rotatedViewBox.frame.size; // Create the bitmap context UIGraphicsBeginImageContext(rotatedSize); CGContextRef bitmap = UIGraphicsGetCurrentContext(); // Move the origin to the middle of the image so we will rotate and scale around the center. CGContextTranslateCTM(bitmap, rotatedSize.width/2, rotatedSize.height/2); // // Rotate the image context CGContextRotateCTM(bitmap, DegreesToRadians(degrees)); // Now, draw the rotated/scaled image into the context CGContextScaleCTM(bitmap, 1.0, -1.0); CGContextDrawImage(bitmap, CGRectMake(-self.size.width / 2, -self.size.height / 2, self.size.width, self.size.height), [self CGImage]); UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return newImage; } @end

Este es el fragmento de código del ejemplo de apple SquareCam .

Para llamar al método anterior simplemente use el código a continuación

UIImage *rotatedSquareImage = [square imageRotatedByDegrees:rotationDegrees];

Aquí el cuadrado es un UIImage y rotationDegrees es un flote ivar para girar la imagen que los grados


Simplemente agrega este código a la imagen.

Image.transform=CGAffineTransformMakeRotation(M_PI / 2);


Swift 3 versión:

imageView.transform = CGAffineTransform(rotationAngle: CGFloat(M_PI_2))


Swift 3 y Swift 4 usan .pi en su lugar

p.ej:

//rotate 270 degrees myImageView.transform = CGAffineTransform(rotationAngle: (.pi * 1.5)) //rotate 90 degrees myImageView.transform = CGAffineTransform(rotationAngle: (.pi / 2))


Tengo un error al intentar esto en XCode 6.3 Swift 1.2

self.imageview.transform = CGAffineTransformMakeRotation(M_PI_2);

Deberías probar esto para forzar la corrección tipocast:

self.imageview.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_2));


Swift 4 | Sintaxis de Xcode 9 (tenga en cuenta que este código gira un UIImageView 90 grados en sentido horario, no un UIImage):

myImageView.transform = CGAffineTransform(rotationAngle: CGFloat(Double.pi / 2))


Swift 4+.

arrowImageView.transform = CGAffineTransform(rotationAngle: .pi/2)

Nota: el ángulo está en radianes

.pi = 180 grados

.pi / 2 = 90 grados

Si quieres agregar con animación

@IBAction func applyTransForm(sender: UIButton) { sender.isSelected = !sender.isSelected UIView.animate(withDuration: 1, animations: { if sender.isSelected { self.arrowImageView.transform = CGAffineTransform(rotationAngle: .pi) } else { self.arrowImageView.transform = CGAffineTransform(rotationAngle: 0) } }) }

Salida:


- (UIImage *)rotateImage:(UIImage*)image byDegree:(CGFloat)degrees { UIView *rotatedViewBox = [[UIView alloc] initWithFrame:CGRectMake(0,0,image.size.width, image.size.height)]; CGAffineTransform t = CGAffineTransformMakeRotation(DegreesToRadians(degrees)); rotatedViewBox.transform = t; CGSize rotatedSize = rotatedViewBox.frame.size; [rotatedViewBox release]; UIGraphicsBeginImageContext(rotatedSize); CGContextRef bitmap = UIGraphicsGetCurrentContext(); CGContextTranslateCTM(bitmap, rotatedSize.width, rotatedSize.height); CGContextRotateCTM(bitmap, DegreesToRadians(degrees)); CGContextScaleCTM(bitmap, 1.0, -1.0); CGContextDrawImage(bitmap, CGRectMake(-image.size.width, -image.size.height, image.size.width, image.size.height), [image CGImage]); UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return newImage; }


self.imageview.transform = CGAffineTransformMakeRotation(M_PI_2);