ios - Base64 图像编码 Swift 4 iOS

标签 ios swift uiimage base64 encode

我有以下代码可以从库中选择一个图像,然后进行 base64encode 以供将来上传...图像被选中并显示在我想要的应用程序中...但是在输出中我得到了这个错误

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

如果我在输出中使用打印的 base64 代码并使用网络工具 ( 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
    }

最佳答案

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

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

关于ios - Base64 图像编码 Swift 4 iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46304641/

相关文章:

javascript - translate3d 在 iOS 上滞后

ios - swift 。 Viewcontroller 知道子类

ios - 应用程序崩溃,即使除了带有 Swift 2 的 Xcode 中的代码之外什么都没有

video - iOS:在播放过程中获取每一帧视频帧的内容

ios - 对象为零,但代码解释不为零

ios - 使用 Xcode 13 构建后,应用程序在 iOS 12 及更低版本上崩溃

ios - 如何让pickerView水平滚动?

ios - 使用 CATransform3D 旋转 UIImage 并仅获得裁剪后的新 UIImage

加载时 Swift 会改变图像的颜色

ios - 通过 Apple 批量购买计划分发自定义 B2B iOS 应用程序?