简体   繁体   English

Base64图像编码Swift 4 iOS

[英]Base64 image encoding Swift 4 iOS

I have the following code to select an image from the library and then base64encode for future upload... image is selected and appears in app as I want... however in output I get this error 我有以下代码从库中选择一个图像,然后使用base64encode进行将来的上载...已选择该图像并根据需要显示在应用中...但是在输出中出现此错误

[discovery] errors encountered while discovering extensions: Error Domain=PlugInKit Code=13 "query cancelled" UserInfo={NSLocalizedDescription=query cancelled} 发现扩展时遇到[发现]错误:错误域= PlugInKit代码= 13“查询已取消” UserInfo = {NSLocalizedDescription =查询已取消}

and if I take the printed base64 code in output and use a webtool ( https://www.base64decode.org/ ) to attempt to decode said info, to confirm it has worked, before I start to work on decoding in iOS later - it appears to be malformed ? 如果我在输出中使用打印的base64代码,并使用网络工具( https://www.base64decode.org/ )尝试对上述信息进行解码,以确认其有效,然后再开始在iOS中进行解码-看来是畸形的吗? I am assuming I am not correctly encoding the image still ? 我假设我还没有正确编码图像?

 @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
    }

I'm using these 2 functions in my project and it is working fine. 我在我的项目中使用了这两个函数,并且工作正常。

 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
    }

I have also an extension to handle image quality that can be useful: 我还有一个扩展程序来处理可能有用的图像质量:

  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 }
        }

//For Swift 4.2 - modified extension //对于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 }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM