[英]How to capture photo while recording video in iOS Swift?
在這里,我正在從設備的后置攝像頭錄制視頻。 在拍攝視頻時,如何捕獲照片並將其保存到photoLibrary。
這是我使用的代碼:
var photoTagImage = Data()
熒光筆按鈕用於在拍攝視頻時拍照
@IBAction func HightLightButtonClicked(_ sender: UIButton) {
// return
self.selectedtagsArray = NSMutableArray.init()
if self.recordEventInfo.isDayEvent {
let clipSecond: Int64 = 30
let clipName: String = "Hightlight"
let dict: Dictionary <String, Any> = [
"clipcapturesecond": Int64(self.totalRecordedSecond),
"cliptagsecond": clipSecond,
"clipname": clipName,
"teamname": "",
"tagsArray": self.selectedtagsArray,
"clipDate": Date.init()
]
self.videoClipsArray.add(dict)
} else if self.recordEventInfo.isMatchEvent {
picker.sourceType = .camera
picker.delegate = self
self.present(picker, animated: true, completion: nil)
let clipSecond: Int64 = 30
let clipName: String = "Hightlight"
let dict: Dictionary <String, Any> = [
"clipcapturesecond": Int64(self.totalRecordedSecond),
"cliptagsecond": clipSecond,
"clipname": clipName,
"teamname": "",
"tagsArray": self.selectedtagsArray,
"clipDate": Date.init(),
"clipImage": photoTagImage
]
print("phototagimage: \(photoTagImage)")
self.matchEventvideoClipsArray.add(dict)
}
}
拍照后應保存到照片庫
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String: Any]) {
let image = info[UIImagePickerControllerOriginalImage] as! UIImage
let docDir = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
let imageUniqueName: Int64 = Int64(NSDate().timeIntervalSince1970 * 1000)
let filePath = docDir.appendingPathComponent("\(imageUniqueName).png")
do {
if let pngimage = UIImagePNGRepresentation((info[UIImagePickerControllerOriginalImage] as? UIImage)!) {
photoTagImage = pngimage
print("photoImage::::::\(photoTagImage)")
try pngimage.write(to : filePath , options : .atomic)
/*FETCH DATA:
public static func fetchData(nameImage : String) -> UIImage{
let docDir = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
let filePath = docDir.appendingPathComponent(nameImage);
if FileManager.default.fileExists(atPath: filePath.path){
if let containOfFilePath = UIImage(contentsOfFile : filePath.path){
return containOfFilePath;
}
}
return UIImage();
}
*/
}
}
}
目前,我可以錄制視頻,但不能拍照。 我已經打印了值print(“ phototagimage:(photoTagImage)”)它顯示photoImage為0字節。
如果您可以截取視圖的屏幕截圖以獲取圖像並對其進行處理,該怎么辦。
extension UIView {
func currentViewToImage() -> UIImage {
UIGraphicsBeginImageContext(self.bounds.size)
self.drawHierarchy(in: self.bounds, afterScreenUpdates: true)
var image:UIImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
}
要么
獲取窗口的屏幕截圖:
guard let layer = UIApplication.shared.keyWindow?.layer else { return }
let renderer = UIGraphicsImageRenderer(size: layer.frame.size)
let image = renderer.image(actions: { context in
layer.render(in: context.cgContext)
})
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
這對我有用,並將我的屏幕截圖保存到PhotoLibrary。
@IBOutlet weak var shutterButton: UIButton!
@IBAction func HightLightButtonClicked(_ sender: UIButton) {
self.shutterButton.isHidden = true
UIGraphicsBeginImageContextWithOptions(CGSize(width: self.view.frame.size.width, height: self.view.frame.size.height), false, 0.0)
self.view.drawHierarchy(in: CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: self.view.frame.size.height), afterScreenUpdates: true)
if let image = UIGraphicsGetImageFromCurrentImageContext() {
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
}
UIGraphicsEndImageContext();
self.shutterButton.isHidden = false
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.