2017-02-19 2 views
1

Momentan macht mein Code nur ein Foto und speichert es in der Fotogalerie. Ich möchte, dass ein Foto oben auf dem Foto in der unteren rechten Ecke des Fotos gedruckt wird. Das Foto heißt "logo.png". Das ist genau wie ein unteres Drittel in den Kabelnachrichten.Bild oben auf gespeichertem Foto drucken (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) 
     } } } 

Antwort

0

Sie müssen einen grafischen Kontext verwenden. Hier ist ein generisches Beispiel, das ich auf meinen Notizen hatte. Dies ist nützlich, Bilder zu kombinieren, anpassen es nur, um es, wie Sie wollen machen arbeiten (Das wäre Einstellungen Ihr eigenes Bild (image1 in meinem Fall) in der rechten Ecke.)

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

Welche Funktion würde ich dieses in imagex oder erfassen? @juanCurti –

+0

Es ist das gleiche. Sie sollten es schreiben, wenn Sie sicher sind, dass das Bild perfekt gespeichert ist. –

+0

SO ist es egal, ob es in Capture oder ImageX ist, es muss nur in einer dieser Funktionen sein. @ juanCurti –