2017-02-19 4 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の中でその機能の1つに入るだけであれば問題ありません。 @juanCurti –

関連する問題