[ios] UIImage를 수평으로 뒤집는 방법?

UIImage수평 으로 뒤집는 방법 UIImageOrientationUpMirrored, UIImage클래스 참조 에서 열거 형 값을 찾았습니다 UIImage. 이 속성을 사용하여 뒤집는 방법 .



답변

목표 -C

UIImage* sourceImage = [UIImage imageNamed:@"whatever.png"];

UIImage* flippedImage = [UIImage imageWithCGImage:sourceImage.CGImage
                                            scale:sourceImage.scale
                                      orientation:UIImageOrientationUpMirrored];

빠른

let flippedImage = myImage.withHorizontallyFlippedOrientation()


답변

이를 달성 할 수있는 매우 간단한 방법은 UIImage 대신 UIImageView를 만들고 UIImageView에서 변환을 수행하는 것입니다.

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

도움이 되었기를 바랍니다.


답변

를 사용하여 OpenGL 텍스처를 초기화하려면 종종 수직 뒤집기가 필요합니다 glTexImage2d(...). 위에서 제안한 트릭은 실제로 이미지 데이터를 수정하지 않으며이 경우에는 작동하지 않습니다. 다음은 https://stackoverflow.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;
}


답변

imageFlippedForRightToLeftLayoutDirection으로 시도하고 다른 방향으로 새 UIImage를 만들었지 만 적어도 이것이 내 이미지를 뒤집는 유일한 해결책입니다.

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

내 놀이터에서 볼 수 있듯이 작동했습니다! 🙂
여기에 이미지 설명 입력

그리고 물론 finalImage = UIImage (CIImage : rotada3)


답변

이미지 방향이 정의하는대로 :

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
};

AVCaptureSession에서 UIImage를 처리하는 것과 같은 더 많은 상황을 위해 일부 개선했습니다.

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];


답변

여기에 빠른 버전이 있습니다. (이 질문을 댓글에서 봤습니다)

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


답변

iOS 10 이상

[myImage imageWithHorizontallyFlippedOrientation];

스위프트 4 :

let flippedImage = myImage.withHorizontallyFlippedOrientation()