2017-03-09 64 views
-1

在我发布一些代码并说出一些事情之前,我正在使用此窗格拍摄照片和视频:https://github.com/imaginary-cloud/CameraManager 我想要做的仅仅是拍摄图像,在底部放置一个文本(该文本可以通过我已经创建的现有短语阵列进行拾取),并且我想将这两个实体合并为一个新的图像,它将显示在新的视图控制器中并保存在相机胶卷中,当然是原来的。我怎样才能做到这一点?由于如何在Swift3中捕获的图像上添加UIImage

这里是我的capturePhoto代码:

let when = DispatchTime.now() + 5 
    func capturePicture(){ 
     _ = cameraManager.addPreviewLayerToView(cameraPreview, newCameraOutputMode: CameraOutputMode.stillImage) 

     DispatchQueue.main.asyncAfter(deadline: .now() + 0.4) { 
      // do stuff x seconds later 

      self.cameraManager.capturePictureWithCompletion({ (image, error) -> Void in 

       self.cameraPreview.image = image 

      }) 

     } 


    } 
+0

使用UIImage.draw –

回答

0

尝试以下

UIGraphicsBeginImageContextWithOptions(image!.size, false, 0.0) 
// I tought cameraPreview is an imageview 
cameraPreview.layer.render(in: UIGraphicsGetCurrentContext()!) 
YOUR_UILABEL.layer.render(in: UIGraphicsGetCurrentContext()!) 
let newImage = UIGraphicsGetImageFromCurrentImageContext() 
let imageData = UIImageJPEGRepresentation(newImage!, 0.9) 
let pngImage = UIImage(data: imageData!) 
UIGraphicsEndImageContext() 

的代码片段然后你的新图像目标是准备在pngImage

和协议样品低于

// you can add this protocol to first viewcontroller 
protocol ReceiveImageProtocol: class { 

    func onReceiveImage(image: UIImage) 

} 

class FirstViewController: UIViewController, ReceiveImageProtocol { 

    ... 

    internal func onReceiveImage(image: UIImage) { 
     // use merger function for image and label 
    } 

    internal func openSeconViewController() { 
     let secondViewController = self.storyboard?.instantiateViewController(withIdentifier: "SecondViewController") as! SecondViewController 
     secondViewController.imageProtocol = self 
     // push or present secondViewController 
    } 
} 

class SecondViewController: UIViewController { 

    public weak var imageProtocol: ReceiveImageProtocol! 

    // when you capture return back to firstviewcontroller 
    // using pop or dismiss 
    // and don't forget to call 
    // self.imageProtocol.onReceiveImage(image: YOUR_CAPTURED_IMAGE) 
} 
+0

谢谢,将尝试实施它,我会报告回来,如果它的工作/没有工作。现在感谢! –

+0

我的朋友,我有一个问题,我没有在原始问题中编写这个细节,但我的随机标签是在另一个视图控制器中,我怎么能在我的主人那里调用它,上面的函数位于哪个? –

+0

如果您只捕获一个图像,则可以通过委托向先前的视图控制器或多个图像发送此图像,当您推送或呈现捕获图像视图控制器时,从第一个视图控制器发送标签以捕获图像视图控制器。 – abdullahselek

0

您可以使用UIGraphicsBeginImageContextWithOptions来完成此操作。

UIGraphicsBeginImageContextWithOptions(self.cameraPreview.bounds.size, false, UIScreen.main.scale) self.imageView.layer.render(in: UIGraphicsGetCurrentContext()!) 
let captureImage = UIGraphicsGetImageFromCurrentImageContext()! 
UIGraphicsEndImageContext() 

然后您将捕获的图像与其上的文字。

+0

也会试试这个!谢谢! –