사진 캡처를 처리하기 위해 AVFoundation의 대리자 메서드를 호출하지만 정확한 방향으로 UIImage로 생성하는 AVCapturePhoto를 변환하는 데 어려움을 겪고 있습니다. 아래 루틴이 성공했지만, 나는 항상 올바른 방향의 UIImage (UIImage.imageOrientation = 3)를 얻는다. UIImage (데이터 : 이미지)를 사용하고 photo.cgImageRepresentation()을 처음 사용할 때 오리엔테이션을 제공 할 방법이 없습니다. takeRetainedValue()도 도움이되지 않습니다. 도와주세요.올바른 방향으로 AVCapturePhoto에서 UIImage를 생성하는 방법은 무엇입니까?
결과 이미지가 Vision Framework 워크 플로로 공급되는 동안 이미지 방향이 중요합니다.
func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?) {
// capture image finished
print("Image captured.")
if let imageData = photo.fileDataRepresentation() {
if let uiImage = UIImage(data: imageData){
// do stuff to UIImage
}
}
}
UPDATE 1 : 읽기 애플의 Photo Capture Programming Guide (iOS11에 대한 유효 기간), 내가 잘못하고 있던 한 가지를 찾아 관리 않았다 (모든 캡처 호출에
- self.capturePhotoOutput .capturePhoto) PhotoOutput 객체와의 연결을 설정하고 사진을 찍을 때 장치 방향에 맞게 방향을 업데이트해야합니다. 이를 위해 UIDeviceOrientation의 확장을 생성하고 capture 루틴을 호출하고 didFinishProcessingPhoto 대리자 메소드가 실행될 때까지 기다리기 위해 만든 snapPhoto() 함수에 사용했습니다. 여기에 코드 샘플 구분 기호가 올바르게 표시되지 않는 것 때문에 코드의 스냅 샷을 추가했습니다.
2 링크 GitHub의에 전체 프로젝트에 업데이트 : 난 당신이 또한 CGImageProperties
전화의 metadata
개체를 찾을 것입니다 확신 해요 AVCapturePhoto
내부 https://github.com/agu3rra/Out-Loud
흥미과 가능성 [버그 파일로 (http://bugreport.apple.com). 파일에 데이터를 쓰고 파일 기반'UIImage' 이니셜 라이저를 사용하면 방향을 무시하는 것처럼 보입니까? – rickster
snapPhoto() 루틴 (UPDATE 1)에서 연결 호출을 추가 한 후에 더 이상 방향을 무시하지 않지만 다시 UIImage에서 잘못된 방향 값을 제공합니다. –
오리엔테이션 확장에 관하여. Apple은 AVCam을 업데이트했습니다. 유사한 확장 기능이 있습니다. 'extension UIDeviceOrientation { var videoOrientation : AVCaptureVideoOrientation? { 스위치 자체는 { 경우 .portrait : 반환 .portrait 경우 .portraitUpsideDown : .portraitUpsideDown 경우 .landscapeLeft를 반환 : 반환 경우 .landscapeRight .landscapeRight : 반환 .landscapeLeft을 기본 : 리턴 } 전무} }' –