12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- //
- // CameraShot.swift
- // ALCameraViewController
- //
- // Created by Alex Littlejohn on 2015/06/17.
- // Copyright (c) 2015 zero. All rights reserved.
- //
- import UIKit
- import AVFoundation
- public typealias CameraShotCompletion = (UIImage?) -> Void
- public func takePhoto(_ stillImageOutput: AVCaptureStillImageOutput, videoOrientation: AVCaptureVideoOrientation, cameraPosition: AVCaptureDevice.Position, cropSize: CGSize, completion: @escaping CameraShotCompletion) {
-
- guard let videoConnection: AVCaptureConnection = stillImageOutput.connection(with: AVMediaType.video) else {
- completion(nil)
- return
- }
-
- videoConnection.videoOrientation = videoOrientation
-
- stillImageOutput.captureStillImageAsynchronously(from: videoConnection, completionHandler: { buffer, error in
-
- guard let buffer = buffer,
- let imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(buffer),
- var image = UIImage(data: imageData) else {
- completion(nil)
- return
- }
- // flip the image to match the orientation of the preview
- if cameraPosition == .front, let cgImage = image.cgImage {
- switch image.imageOrientation {
- case .leftMirrored:
- image = UIImage(cgImage: cgImage, scale: image.scale, orientation: .right)
- case .left:
- image = UIImage(cgImage: cgImage, scale: image.scale, orientation: .rightMirrored)
- case .rightMirrored:
- image = UIImage(cgImage: cgImage, scale: image.scale, orientation: .left)
- case .right:
- image = UIImage(cgImage: cgImage, scale: image.scale, orientation: .leftMirrored)
- case .up:
- image = UIImage(cgImage: cgImage, scale: image.scale, orientation: .upMirrored)
- case .upMirrored:
- image = UIImage(cgImage: cgImage, scale: image.scale, orientation: .up)
- case .down:
- image = UIImage(cgImage: cgImage, scale: image.scale, orientation: .downMirrored)
- case .downMirrored:
- image = UIImage(cgImage: cgImage, scale: image.scale, orientation: .down)
- @unknown default:
- fatalError("unknown image orientation")
- }
- }
-
- completion(image)
- })
- }
|