2017-02-19 1 views
1

바로 지금 내 코드는 사진을 찍어 사진 갤러리에 저장합니다. 사진의 오른쪽 하단에 사진 상단에 사진을 인쇄하고 싶습니다. 사진은 "logo.png"라고합니다. 이것은 케이블 뉴스의 3 분의 1과 같습니다.저장된 사진 위에 이미지 인쇄 (swift3)

import UIKit 
    import AVFoundation 

    class ViewController: UIViewController,AVCapturePhotoCaptureDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate, UITextFieldDelegate { 

var captureSesssion : AVCaptureSession! 
var cameraOutput : AVCapturePhotoOutput! 
var previewLayer : AVCaptureVideoPreviewLayer! 

@IBOutlet var sa: UIView! 
    override func viewDidLoad() { 
super.viewDidLoad() 



captureSesssion = AVCaptureSession() 
captureSesssion.sessionPreset = AVCaptureSessionPresetPhoto 
cameraOutput = AVCapturePhotoOutput() 

let device = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo) 

if let input = try? AVCaptureDeviceInput(device: device) { 
    if (captureSesssion.canAddInput(input)) { 
     captureSesssion.addInput(input) 
     if (captureSesssion.canAddOutput(cameraOutput)) { 
      captureSesssion.addOutput(cameraOutput) 
      previewLayer = AVCaptureVideoPreviewLayer(session: captureSesssion) 
       previewLayer.frame = CGRect(x: 10, y: 10, width: 700, height: 700) 
      sa.layer.addSublayer(previewLayer) 
      captureSesssion.startRunning() 
     }}}} 


     @IBAction func didPressTakePhoto(_ sender: UIButton) { 



     let settings = AVCapturePhotoSettings() 
let previewPixelType = settings.availablePreviewPhotoPixelFormatTypes.first! 
let previewFormat = [ 
    kCVPixelBufferPixelFormatTypeKey as String: previewPixelType, 
    kCVPixelBufferWidthKey as String: 160, 
    kCVPixelBufferHeightKey as String: 160 
] 
settings.previewPhotoFormat = previewFormat 
cameraOutput.capturePhoto(with: settings, delegate: self) 


} 


func imagex(_ image: UIImage, didFinishSavingWithError error: NSError?, contextInfo: UnsafeRawPointer) { 

} 

func capture(_ captureOutput: AVCapturePhotoOutput, didFinishProcessingPhotoSampleBuffer photoSampleBuffer: CMSampleBuffer?, previewPhotoSampleBuffer: CMSampleBuffer?, resolvedSettings: AVCaptureResolvedPhotoSettings, bracketSettings: AVCaptureBracketedStillImageSettings?, error: Error?) { 




    if let sampleBuffer = photoSampleBuffer, 
     let previewBuffer = previewPhotoSampleBuffer, 
     let dataImage = AVCapturePhotoOutput.jpegPhotoDataRepresentation(forJPEGSampleBuffer: sampleBuffer, previewPhotoSampleBuffer: previewBuffer) { 


     let dataProvider = CGDataProvider(data: dataImage as CFData) 
     let cgImageRef: CGImage! = CGImage(jpegDataProviderSource: dataProvider!, decode: nil, shouldInterpolate: true, intent: .defaultIntent) 
     let image = UIImage(cgImage: cgImageRef, scale: 1.0, orientation: UIImageOrientation.right) 

     UIImageWriteToSavedPhotosAlbum(image, self, #selector(self.imagex(_:didFinishSavingWithError:contextInfo:)), nil) 
     } } } 

답변

0

그래픽 컨텍스트를 사용해야합니다. 여기 내 노트에있는 일반적인 예가 있습니다. 이 기능은 이미지를 결합하고 원하는대로 작동하도록 조정하는 데 유용합니다. 오른쪽 구석에 맞춤 이미지 (내 이미지 1)가 적용됩니다.

var image1 = UIImage(named: "image1.png") 
var imageBase = yourImageView.image 

var size = yourImageView.frame.size 
UIGraphicsBeginImageContext(size) 

let areaSize = CGRect(x: 0, y: size.width - (size.width/4), width: (size.width/4), height:(size.height/4)) 
image1!.drawInRect(areaSize) 

imageBase!.drawInRect(areaSize, blendMode: CGBlendMode.Normal, alpha: 0.8) 

var newImage:UIImage = UIGraphicsGetImageFromCurrentImageContext() 
UIGraphicsEndImageContext() 
+0

imagex 또는 캡처? @juanCurti –

+0

동일합니다. 이미지가 완벽하게 저장되었다고 확신 할 때 써야합니다. –

+0

그래서 캡처 또는 imagex에서 그 기능 중 하나에 있어야하는 것은 중요하지 않습니다. @juanCurti –