2017-02-19 32 views
1

Сейчас мой код просто берет фотографию и сохраняет ее в фотогалерее. Я хочу, чтобы фото было напечатано поверх фотографии в правом нижнем углу фотографии. Фотография называется «logo.png». Это похоже на нижнюю треть в новостях по кабелю.Распечатать изображение поверх сохраненной фотографии (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

Вы должны использовать графический контекст. Вот общий пример, который я имел в своих заметках. Это полезно комбинировать изображения, просто адаптировать его, чтобы сделать его работу, как вы хотите (Это было бы настройки персонализированного изображения (image1 в моем случае) в правом углу.)

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 –