vuelta voltear voltea rotar porque plus pantalla orientacion las imagen girar frontal fotos espejo dar cómo como cambiar camara iphone uiimage flip

voltear - rotar pantalla iphone 6



Cómo voltear UIImage horizontalmente? (16)

Cómo voltear el UIImage horizontalmente, encontré el valor de enumeración UIImageOrientationUpMirrored en la referencia de la clase UIImage , cómo hacer uso de esta propiedad para voltear UIImage .


A menudo se requiere inversión vertical para inicializar la textura OpenGL usando glTexImage2d(...) . Los trucos propuestos anteriormente no modifican los datos de imagen y no funcionarán en este caso. Aquí hay un código para hacer el cambio de datos real inspirado en https://.com/a/17909372

- (UIImage *)flipImage:(UIImage *)image { UIGraphicsBeginImageContext(image.size); CGContextDrawImage(UIGraphicsGetCurrentContext(),CGRectMake(0.,0., image.size.width, image.size.height),image.CGImage); UIImage *i = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return i; }


Como la orientación de la imagen define:

typedef NS_ENUM(NSInteger, UIImageOrientation) { UIImageOrientationUp, // default orientation UIImageOrientationDown, // 180 deg rotation UIImageOrientationLeft, // 90 deg CCW UIImageOrientationRight, // 90 deg CW UIImageOrientationUpMirrored, // as above but image mirrored along other axis. horizontal flip UIImageOrientationDownMirrored, // horizontal flip UIImageOrientationLeftMirrored, // vertical flip UIImageOrientationRightMirrored, // vertical flip };

Hice algunas mejoras para más circunstancias como el manejo de UIImage de AVCaptureSession.

UIImage* sourceImage = [UIImage imageNamed:@"whatever.png"]; UIImageOrientation flipingOrientation; if(sourceImage.imageOrientation>=4){ flippedOrientation = sourceImage.imageOrientation - 4; }else{ flippedOrientation = sourceImage.imageOrientation + 4; } UIImage* flippedImage = [UIImage imageWithCGImage:sourceImage.CGImage scale: sourceImage.scale orientation: flipingOrientation];


Esta es una de las respuestas anteriores modificadas y en Swift 3 que encontré particularmente útil cuando tienes un botón que necesita seguir moviendo la imagen hacia atrás y hacia adelante.

func flipImage(sourceImage: UIImage,orientation: UIImageOrientation) -> UIImage { var imageOrientation = orientation switch sourceImage.imageOrientation { case UIImageOrientation.down: imageOrientation = UIImageOrientation.downMirrored; break; case UIImageOrientation.downMirrored: imageOrientation = UIImageOrientation.down; break; case UIImageOrientation.left: imageOrientation = UIImageOrientation.leftMirrored; break; case UIImageOrientation.leftMirrored: imageOrientation = UIImageOrientation.left; break; case UIImageOrientation.right: imageOrientation = UIImageOrientation.rightMirrored; break; case UIImageOrientation.rightMirrored: imageOrientation = UIImageOrientation.right; break; case UIImageOrientation.up: imageOrientation = UIImageOrientation.upMirrored; break; case UIImageOrientation.upMirrored: imageOrientation = UIImageOrientation.up; break; } return UIImage(cgImage: sourceImage.cgImage!, scale: sourceImage.scale, orientation: imageOrientation) }

Utilizar:

imageToFlip: UIImage = flipImage(sourceImage: imageToFlip, orientation: imageToFlip.imageOrientation)


Esta es una implementación sólida para reflejar / voltear un UIImage horizontalmente, y puede aplicarse a la imagen hacia adelante y hacia atrás. Como cambia los datos de la imagen subyacente, el dibujo (como, captura de pantalla) también cambiará. Probado para funcionar, sin pérdida de calidad.

func flipImage() -> UIImage? { UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale) let bitmap = UIGraphicsGetCurrentContext()! bitmap.translateBy(x: size.width / 2, y: size.height / 2) bitmap.scaleBy(x: -1.0, y: -1.0) bitmap.translateBy(x: -size.width / 2, y: -size.height / 2) bitmap.draw(self.cgImage!, in: CGRect(x: 0, y: 0, width: size.width, height: size.height)) let image = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return image? }


Esta es una versión compatible con iOS8 / 9 que funciona:

UIImage *image = [UIImage imageNamed:name]; if ([[UIApplication sharedApplication] userInterfaceLayoutDirection] == UIUserInterfaceLayoutDirectionRightToLeft) { if ([image respondsToSelector:@selector(imageFlippedForRightToLeftLayoutDirection)]) { //iOS9 image = image.imageFlippedForRightToLeftLayoutDirection; } else { //iOS8 CIImage *coreImage = [CIImage imageWithCGImage:image.CGImage]; coreImage = [coreImage imageByApplyingTransform:CGAffineTransformMakeScale(-1, 1)]; image = [UIImage imageWithCIImage:coreImage scale:image.scale orientation:UIImageOrientationUp]; } } return image;


La respuesta de aroth en SWIFT 3:

let sourceImage = UIImage(named: "whatever.png")! let flippedImage = UIImage(cgImage: sourceImage.cgImage!, scale: sourceImage.scale, orientation: .upMirrored)


Lo he intentado con imageFlippedForRightToLeftLayoutDirection y creando un nuevo UIImage con diferentes orientaciones, pero al menos esta es la única solución que encontré para cambiar mi imagen

let ciimage: CIImage = CIImage(CGImage: imagenInicial.CGImage!) let rotada3 = ciimage.imageByApplyingTransform(CGAffineTransformMakeScale(-1, 1))

¡Como puedes ver en mi patio de recreo funcionó! :)

Y, por supuesto, dejar finalImage = UIImage (CIImage: rotada3)


Puede ser esto será de utilidad para algunos:

UIImageOrientation imageOrientation; switch (sourceImage.imageOrientation) { case UIImageOrientationDown: imageOrientation = UIImageOrientationDownMirrored; break; case UIImageOrientationDownMirrored: imageOrientation = UIImageOrientationDown; break; case UIImageOrientationLeft: imageOrientation = UIImageOrientationLeftMirrored; break; case UIImageOrientationLeftMirrored: imageOrientation = UIImageOrientationLeft; break; case UIImageOrientationRight: imageOrientation = UIImageOrientationRightMirrored; break; case UIImageOrientationRightMirrored: imageOrientation = UIImageOrientationRight; break; case UIImageOrientationUp: imageOrientation = UIImageOrientationUpMirrored; break; case UIImageOrientationUpMirrored: imageOrientation = UIImageOrientationUp; break; default: break; } resultImage = [UIImage imageWithCGImage:sourceImage.CGImage scale:sourceImage.scale orientation:imageOrientation];


Una forma muy simple de lograrlo es creando un UIImageView en lugar de un UIImage y haz la transformación en UIImageView.

yourImageView.image =[UIImage imageNamed:@"whatever.png"]; yourImageView.transform = CGAffineTransformMakeScale(-1, 1); //Flipped

Espero que esto ayude.


Una simple extensión.

extension UIImage { var flipped: UIImage { guard let cgImage = cgImage else { return self } return UIImage(cgImage: cgImage, scale: scale, orientation: .upMirrored) } }

Uso:

let image = #imageLiteral(resourceName: "imageName") let imageView = UIImageView(image: image.flipped)


aquí está la versión rápida: (Vi esta pregunta en comentarios)

let srcImage = UIImage(named: "imageName") let flippedImage = UIImage(CGImage: srcImage.CGImage, scale: srcImage.scale, orientation: UIImageOrientation.UpMirrored)


veloz 4

yourImage.transform = CGAffineTransform(scaleX: -1, y: 1);


Para Swift 3:

imageView.transform = CGAffineTransform(scaleX: -1, y: 1)


Probado en Swift 3 y superior

Aquí está la solución simple para lograr este problema con las extensiones. Lo pruebo y funcionó. Puedes reflejar en cualquier dirección.

extension UIImage { func imageUpMirror() -> UIImage { guard let cgImage = cgImage else { return self } return UIImage(cgImage: cgImage, scale: scale, orientation: .upMirrored) } func imageDownMirror() -> UIImage { guard let cgImage = cgImage else { return self } return UIImage(cgImage: cgImage, scale: scale, orientation: .downMirrored) } func imageLeftMirror() -> UIImage { guard let cgImage = cgImage else { return self } return UIImage(cgImage: cgImage, scale: scale, orientation: .leftMirrored) } func imageRightMirror() -> UIImage { guard let cgImage = cgImage else { return self } return UIImage(cgImage: cgImage, scale: scale, orientation: .rightMirrored) } }

Uso para este código

let image = #imageLiteral(resourceName: "imageName") flipHorizontally = image.imageUpMirror()

Entonces, puedes usar otras funciones.


iOS 10+

[myImage imageWithHorizontallyFlippedOrientation];


UIImage* sourceImage = [UIImage imageNamed:@"whatever.png"]; UIImage* flippedImage = [UIImage imageWithCGImage:sourceImage.CGImage scale:sourceImage.scale orientation:UIImageOrientationUpMirrored];