【问题标题】:Base64 image encoding Swift 4 iOSBase64 图像编码 Swift 4 iOS
【发布时间】:2018-02-28 11:41:17
【问题描述】:

我有以下代码从库中选择一个图像,然后 base64encode 以供将来上传...图像已选择并根据我的需要出现在应用程序中...但是在输出中我收到此错误

发现扩展时遇到[discovery] 错误:Error Domain=PlugInKit Code=13 "query cancelled" UserInfo={NSLocalizedDescription=query cancelled}

如果我在输出中使用打印的 base64 代码并使用 webtool (https://www.base64decode.org/) 尝试解码所述信息,以确认它已经工作,然后我稍后开始在 iOS 中进行解码 - 它似乎是畸形?我假设我仍然没有正确编码图像?

 @IBAction func selectImage(_ sender: AnyObject) {


        selectImage.allowsEditing = true //2
        selectImage.sourceType = .photoLibrary //3
        present(selectImage, animated: true, completion: nil)//4


    }

  func imagePickerController(_ selectImage: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {


        let chosenImage = info[UIImagePickerControllerEditedImage] as! UIImage //2

        profilePic.contentMode = .scaleAspectFit //3
        profilePic.image = chosenImage //4

        let quality = 1.0
        base64String = (UIImageJPEGRepresentation(chosenImage, CGFloat(quality))?.base64EncodedString())!
        print (base64String)

        self.dismiss(animated: true, completion: nil) //5
    }

【问题讨论】:

    标签: ios swift uiimage base64 encode


    【解决方案1】:

    我在我的项目中使用了这两个函数,并且运行良好。

     func imageTobase64(image: UIImage) -> String {
            var base64String = ""
            let  cim = CIImage(image: image)
            if (cim != nil) {
                let imageData = image.highQualityJPEGNSData
                base64String = imageData.base64EncodedString(options: NSData.Base64EncodingOptions.lineLength64Characters)
            }
            return base64String
        }
    
        func base64ToImage(base64: String) -> UIImage {
            var img: UIImage = UIImage()
            if (!base64.isEmpty) {
                if let decodedData = Data(base64Encoded: base64 , options: NSData.Base64DecodingOptions.ignoreUnknownCharacters) as Data {
    let decodedimage = UIImage(data: decodedData)
                img = (decodedimage as UIImage?)!
    }
    
            }
            return img
        }
    

    我还有一个可以用来处理图像质量的扩展:

      extension UIImage {
                var highestQualityJPEGNSData:NSData { return UIImageJPEGRepresentation(self, 1.0)! as NSData }
                var highQualityJPEGNSData:NSData    { return UIImageJPEGRepresentation(self, 0.75)! as NSData}
                var mediumQualityJPEGNSData:NSData  { return UIImageJPEGRepresentation(self, 0.5)! as NSData }
                var lowQualityJPEGNSData:NSData     { return UIImageJPEGRepresentation(self, 0.25)! as NSData}
                var lowestQualityJPEGNSData:NSData  { return UIImageJPEGRepresentation(self, 0.0)! as NSData }
            }
    

    //对于 Swift 4.2 - 修改后的扩展

    extension UIImage {
        var highestQualityJPEGNSData:NSData { return self.jpegData(compressionQuality: 1.0)! as NSData }
        var highQualityJPEGNSData:NSData    { return self.jpegData(compressionQuality: 0.75)! as NSData}
        var mediumQualityJPEGNSData:NSData  { return self.jpegData(compressionQuality: 0.5)! as NSData }
        var lowQualityJPEGNSData:NSData     { return self.jpegData(compressionQuality: 0.25)! as NSData}
        var lowestQualityJPEGNSData:NSData  { return self.jpegData(compressionQuality: 0.0)! as NSData }
    }
    

    【讨论】:

    • 我还在苦苦挣扎,但当我回到这个小项目时,一定要投票/发布解决方案
    猜你喜欢
    • 2011-07-16
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    • 2023-01-16
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    • 2015-06-17
    相关资源
    最近更新 更多