Swift - 通过 IBAction 将 UIImageView 作为 PNG 文件保存到图库

Posted

技术标签:

【中文标题】Swift - 通过 IBAction 将 UIImageView 作为 PNG 文件保存到图库【英文标题】:Swift - Save UIImageView to the gallery as a PNG file, via an IBAction 【发布时间】:2018-12-06 22:11:03 【问题描述】:

我在 IBAction 上使用以下代码将我的 UIImageView 保存到我的画廊:

UIGraphicsBeginImageContextWithOptions(self.theView.bounds.size, view.isOpaque, 0)
theView.layer.render(in: UIGraphicsGetCurrentContext()!)
let theCapturedImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
//UIImageWriteToSavedPhotosAlbum(theCapturedImage!,self,nil,nil)

可以,但是画质不是很好,可能是JPEG格式

我怎样才能保存为 PNG?

【问题讨论】:

为什么要绘制图像视图?为什么不保存图像视图的图像? 你玩过 UIGraphicsBeginImageContextWithOptions 中的比例尺吗?如果我没记错的话,渲染图层通常不会提供最好的质量 对于 PNG 转换请看这里:***.com/questions/1489250/… 【参考方案1】:

Swift 4.2,Xcode 10.0

let fileManager = FileManager.default
let paths = (NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as NSString).appendingPathComponent("scan.jpg")

        DispatchQueue.global(qos: .background).async 
            let image = UIImage(data: "Enter ImageData")
            if image != nil 
                let imageData = image!.pngData()
                UIImageWriteToSavedPhotosAlbum(image!, nil, nil, nil)
                fileManager.createFile(atPath: paths as String, contents: imageData, attributes: nil)
                DispatchQueue.main.async 
                    let alert = UIAlertController(title: "Success", message: "Image have been saved successfully!", preferredStyle: UIAlertController.Style.alert)
                    alert.addAction(UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler:  (action) in
                        let _ = self.navigationController?.popViewController(animated: true)
                    ))
                    self.present(alert, animated: true, completion: nil)
                
            
            else 
                let alert = UIAlertController(title: "Message", message: "Image not found", preferredStyle: UIAlertController.Style.alert)
                alert.addAction(UIAlertAction(title: "OK", style: UIAlertAction.Style.cancel, handler:  (action) in
                ))
                self.present(alert, animated: true, completion: nil)
            
        

【讨论】:

以上是关于Swift - 通过 IBAction 将 UIImageView 作为 PNG 文件保存到图库的主要内容,如果未能解决你的问题,请参考以下文章

Swift:IBAction 在单击按钮后将图像放入 UIImageView

Swift:编辑模式,将 editButtonItem() 链接到 IBAction

如何在 Swift 4 中以编程方式将 IBAction 添加到按钮?

如何将边框添加到从 Swift 2.1 中的故事板链接的 @IBAction 按钮?

将 UIImagePickerController 修复为纵向

发生 IBAction 时,Swift addsubview 和应用程序崩溃