【问题标题】:Missing videos in shared album. UIImagePickerController共享相册中缺少视频。 UIImagePickerController
【发布时间】:2020-08-19 05:06:13
【问题描述】:

我的照片库中有一个图像选择器和一个共享相册。在共享相册中我找不到我的视频,只显示照片。在视频相册里,它就在那里。

这是我的代码:

imagePicker.sourceType = .photoLibrary
imagePicker.mediaTypes = ["public.image", "public.movie"]

有没有办法使用 imagepicker 显示共享相册中的视频,或者它是一个限制?谢谢!

【问题讨论】:

    标签: swift uiimagepickercontroller


    【解决方案1】:

    我以前做过,但我需要几天时间

    import MobileCoreServices // out of class
    
    //make sure //viewDidLoad()
        imagePicker.delegate = self 
        imagePicker.sourceType = .savedPhotosAlbum 
        imagePicker.allowsEditing = false  
    

    在按钮点击

        if(sender.tag == 120){ // imagePicker
            IS_MediaPicker = false
            if UIImagePickerController.isSourceTypeAvailable(.savedPhotosAlbum){
                print("Button imagePicker")
     
                imagePicker.delegate = self
                imagePicker.sourceType = .savedPhotosAlbum
                imagePicker.mediaTypes = [kUTTypeImage as String] //import MobileCoreServices
                imagePicker.allowsEditing = false
                present(imagePicker, animated: true, completion: nil)
            }
        }
        
        if(sender.tag == 121){ // videoPicker
            IS_MediaPicker = true
            if(Suffix_selected == ""){
                if 
      UIImagePickerController.isSourceTypeAvailable(.savedPhotosAlbum){
                    print("Button videoPicker")
                    imagePicker = UIImagePickerController()
                    imagePicker.delegate = self
                    imagePicker.sourceType = .savedPhotosAlbum
                    //imagePicker.mediaTypes = ["public.movie"]
                    imagePicker.mediaTypes = 
      UIImagePickerController.availableMediaTypes(for: .savedPhotosAlbum)!
                    imagePicker.mediaTypes = [kUTTypeMovie as String] //import 
        MobileCoreServices
                    imagePicker.allowsEditing = false
                    imagePicker.videoExportPreset = AVAssetExportPresetPassthrough
                    imagePicker.videoQuality = .typeLow
                    //imagePicker.videoMaximumDuration = .init(floatLiteral: 1.5)
                    present(imagePicker, animated: true, completion: nil)
                }
            }
    

    imagePickerController

    var IS_MediaPicker = false // if false it will be image
    func imagePickerController(_ picker: UIImagePickerController, 
        didFinishPickingMediaWithInfo info:
        [UIImagePickerController.InfoKey : Any]) {
        if(self.IS_MediaPicker){ // true it's vedio or audio
            if let videoURL = info[UIImagePickerController.InfoKey.mediaURL] as? 
            URL {
                print(videoURL)
                var Suffix = ""
                if(videoURL.absoluteString.hasSuffix("MOV")){
                    print("MOV")
                    Suffix = ".MOV"
                    Suffix_selected = "MOV"
                }else{
                    print("mp4")
                    Suffix = ".mp4"
                    Suffix_selected = "mp4"
                }
                do {
                    let date = Date()
                    let format = DateFormatter()
                    format.dateFormat = "yyyyMMddHHmmss"
                    let formattedDate = format.string(from: date)
                    print(formattedDate)
                    
                                    let outputData = NSData(contentsOf: videoURL)
                                    let strBase64 = 
      outputData!.base64EncodedString(options: .lineLength64Characters)
                    
          // let data = try Data(contentsOf: videoURL, options: .mappedIfSafe)
          // let strBase64 = data.base64EncodedString(options:.lineLength64Characters)
                     
                } catch {
                }
    
    
          // btn_takevedio.isEnabled = false
            }
        }else{ // false it's Image
            
            let assetPath = info[.imageURL] as! NSURL
            var Suffix = ""
            if (assetPath.absoluteString?.hasSuffix("jpeg"))! {
                print("jpeg")
                //print(assetPath)
                //print(assetPath.path)
                Suffix = ".jpg"
            }else if (assetPath.absoluteString?.hasSuffix("jpg"))! {
                print("jpg")
                Suffix = ".jpg"
                //picker.dismiss(animated: true, completion: nil)
            }
            else if (assetPath.absoluteString?.hasSuffix("png"))! {
                print("png")
                Suffix = ".png"
                //picker.dismiss(animated: true, completion: nil)
            }
            else if (assetPath.absoluteString?.hasSuffix("gif"))! {
                print("gif")
                Suffix = ".gif"
                //picker.dismiss(animated: true, completion: nil)
            }
            else {
                print("Unknown")
                //print(assetPath)
                //print(assetPath.filePathURL?.absoluteURL)
                //picker.dismiss(animated: true, completion: nil)
            }
            
            let date = Date()
            let format = DateFormatter()
            format.dateFormat = "yyyyMMddHHmmss"
            let formattedDate = format.string(from: date)
            print(formattedDate)
            
            let image = info[.originalImage] as! UIImage
            productimage.image = image
            //guard let data = image.jpegData(compressionQuality: 1.0) else { return }
            let imageData:NSData = image.pngData()! as NSData
            let strBase64 = imageData.base64EncodedString(options: .lineLength64Characters) 
            
        }
        picker.dismiss(animated: true, completion: nil)
        
    }
    

    希望我没有忘记任何事情

    【讨论】:

    • 如果我错了,请纠正我,.savedPhotosAlbum 只显示时刻相册,我想用.photoLibrary 代替,可以吗?谢谢!
    • 从逻辑上讲你是对的,但我有 1 周或更长时间来处理这段代码,我相信你应该使用 .savedPhotoAlbum 来处理图像、音频或视频。无论如何,此代码可以帮助您单击并接收数据(imagePickerController)。只需添加你想使用'outputData'的地方
    • 把它复制过去,用debug试试,确保你能完成你的工作,快乐代码^^
    • 你的问题 == >。 imagePicker.mediaTypes = UIImagePickerController.availableMediaTypes(用于:.savedPhotosAlbum)! magePicker.mediaTypes = UIImagePickerController.availableMediaTypes(用于:.savedPhotosAlbum)! imagePicker.mediaTypes = [kUTTypeMovie as String] //导入 MobileCoreServices
    猜你喜欢
    • 2011-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-30
    • 2020-01-01
    • 1970-01-01
    • 2019-01-18
    • 1970-01-01
    相关资源
    最近更新 更多