概述
IOS中调用设备的相机拍照、录制视频,使用UIImagePickerController类,根据不同的SourceType来区分是拍照还是录视频。
SCCamera
1import Foundation 2import UIKit 3import MobileCoreServices 4 5public enum SCImagePickerMediaType{ 6 case Movie 7 case Image 8 case All 9} 10 11public class SCImagePicker{ 12 13 14 /** 15 当前设备的相机是否可用 16 17 :returns: 可用返回true,否则返回false 18 */ 19 public class func isCameraAvailable()->Bool{ 20 return UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera) 21 } 22 23 /** 24 当前设备的照片库是否可用 25 26 :returns: 可用返回true,否则返回false 27 */ 28 public class func isPhotoLibraryAvailable()->Bool{ 29 return UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.PhotoLibrary) 30 } 31 32 /** 33 根据SourceType获取当前设备支持的MediaType 34 35 :param: sourceType 需要使用的SourceType 36 37 :returns: 返回一个数组,可能包含了kUTTypeImage、kUTTypeMovie,更多请查看系统类库源码 38 */ 39 public class func availableMediaTypes(sourceType:UIImagePickerControllerSourceType)->[AnyObject]{ 40 return UIImagePickerController.availableMediaTypesForSourceType(sourceType)! 41 } 42 43 44 /** 45 视频或者图片拍摄后,根据拿到的info获取,当前操作是Movie还是Image 46 47 :param: info didFinishPickingMediaWithInfo事件回调参数中的info参数 48 49 :returns: 返回SCCameraMediaType类型,可能是Movie或者Image 50 */ 51 public class func getMediaTypeFromResultInfo(info: [NSObject : AnyObject])->SCImagePickerMediaType{ 52 let mediaType = info["UIImagePickerControllerMediaType"] as! String 53 if mediaType == kUTTypeMovie as String{ 54 return SCImagePickerMediaType.Movie 55 } 56 else{ 57 return SCImagePickerMediaType.Image 58 } 59 } 60 61 /** 62 保存录制的视频到相机胶卷中 63 64 :param: info didFinishPickingMediaWithInfo事件回调参数中的info参数 65 */ 66 public class func saveMovie(info: [NSObject : AnyObject]){ 67 let mediaUrl: NSURL = info[UIImagePickerControllerMediaURL] as! NSURL 68 let videoPath = mediaUrl.path 69 if UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(videoPath){ 70 UISaveVideoAtPathToSavedPhotosAlbum(videoPath, nil, nil, nil) 71 } 72 } 73 74 /** 75 保存录制的视频到Document文件夹中 76 77 :param: info didFinishPickingMediaWithInfo事件回调参数中的info参数 78 :param: fileName 保存文件的文件名称 79 */ 80 public class func saveMovie(info: [NSObject : AnyObject],fileName:String){ 81 let filePath = SCPath.getDocumentPath().stringByAppendingString("/\(fileName)") 82 //获取系统保存的视频的URL 83 let mediaUrl:NSURL = info[UIImagePickerControllerMediaURL] as! NSURL 84 //转换为NSData 85 let mediaData = NSData(contentsOfURL: mediaUrl) 86 mediaData!.writeToFile(filePath, atomically: true) 87 } 88 89 /** 90 保存拍摄的照片到相机胶卷中 91 92 :param: info didFinishPickingMediaWithInfo事件回调参数中的info参数 93 */ 94 public class func saveImage(info: [NSObject : AnyObject]){ 95 let image:UIImage = getSavedImage(info) 96 UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil) 97 } 98 99 /** 100 保存拍摄的图片到Document文件夹中 101 102 :param: info didFinishPickingMediaWithInfo事件回调参数中的info参数 103 :param: fileName 保存的文件名 104 */ 105 public class func saveImage(info: [NSObject : AnyObject],fileName:String){ 106 let filePath = SCPath.getDocumentPath().stringByAppendingString("/\(fileName)") 107 let image:UIImage = getSavedImage(info) 108 let data:NSData! 109 if fileName.lowercaseString.hasSuffix(".jpg"){ 110 //第二个参数表示jpg图像压缩质量,1为不压缩,最好效果。这个参数范围0.0-1.0 111 data = SCImage.getNSDataFromJPG(image, quality: 1.0) 112 }else{ 113 data = SCImage.getNSDataFromPNG(image) 114 } 115 data.writeToFile(filePath, atomically: true) 116 } 117 118 /** 119 获取拍摄的UIImage对象 120 121 :param: info didFinishPickingMediaWithInfo事件回调参数中的info参数 122 123 :returns: 返回拍摄的照片的UIImage对象 124 */ 125 public class func getSavedImage(info: [NSObject : AnyObject])->UIImage{ 126 let originalImage:UIImage? 127 let editedImage:UIImage? 128 let savedImage:UIImage? 129 130 editedImage = info["UIImagePickerControllerEditedImage"] as? UIImage 131 originalImage = info["UIImagePickerControllerOriginalImage"] as? UIImage 132 133 if (editedImage != nil){ 134 savedImage = editedImage 135 }else{ 136 savedImage = originalImage 137 } 138 return savedImage! 139 } 140 141}
Git地址
http://devonios.com/go/swiftcommon
tips:
本文由wp2blog导入,原文链接:http://devonios.com/sccamera.html