如何将视图(未显示)转换为JPEG图像?

时间:2020-05-05 15:04:06

标签: ios swift

我有这段代码可以将视图转换为图像。但是我希望我的图像采用jpeg格式。我需要在此代码中进行哪些更改才能将我的图像转换为JPEG格式。我没有在设备中显示我的视图。

extension UIView{
    func createTransparentImage() -> UIImage {
        let renderFormat = UIGraphicsImageRendererFormat.default()
        renderFormat.opaque = false
        self.isOpaque = false
        self.layer.isOpaque = true
        self.backgroundColor = UIColor.clear
        self.layer.backgroundColor = UIColor.clear.cgColor
        let renderer = UIGraphicsImageRenderer(size: bounds.size, format: renderFormat)
        return renderer.image{
            (context) in
            layer.render(in: context.cgContext)
        }
    }  
}

2 个答案:

答案 0 :(得分:1)

extension UIView{
func captureViewAsImage() -> UIImage? {
    var screenshotImage :UIImage?
    let layer = self.layer
    UIGraphicsBeginImageContextWithOptions(layer.frame.size, false, UIScreen.main.scale);
    guard let context = UIGraphicsGetCurrentContext() else {return nil}
    layer.render(in:context)
    screenshotImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return screenshotImage
  }
}

并将此功能用作

 let img = view.captureViewAsImage()

答案 1 :(得分:1)

因此,通过扩展名,您可以返回UIImage,如果您可以将其转换为JPEG或{{1},则可以另存为PNGData }在目标C中:

NSData

如果要保存此图像,您可以在let viewSnapshot = view.createTransparentImage() //save as JPEG if let data = viewSnapshot.jpegData(compressionQuality: 0.8) { //variable data has the JPEG image with quality of 80% } //save as PNG if let data = viewSnapshot.pngData() { //variable data has the PNG data of the snapshot }

内执行以下操作
if let data

鉴于您不需要let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask) if let documentsDirectory = paths.first { let fileName = documentsDirectory.appendingPathComponent("myImage.jpg") try? data.write(to: fileName) } ,而仅需要JPEG UIImage,只需对扩展名进行如下修改:

data

请注意,最后一行已更改为:

extension UIView{
    func createImageData(quality: CGFloat = 0.8) -> Data {
        let renderFormat = UIGraphicsImageRendererFormat.default()
        renderFormat.opaque = false
        self.isOpaque = false
        self.layer.isOpaque = true
        self.backgroundColor = UIColor.clear
        self.layer.backgroundColor = UIColor.clear.cgColor
        let renderer = UIGraphicsImageRenderer(size: bounds.size, format: renderFormat)
        return renderer.jpegData(withCompressionQuality: quality, actions: { context in
            layer.render(in: context.cgContext)
        })
    }
}

因此,您只需执行以下操作即可

return renderer.jpegData(withCompressionQuality: quality, actions: { context in

根据LeoDabus,如果需要,可以使用以下扩展名获取具有alpha透明性的let viewSnapshotData = view.createImageData(quality: 0.9) 的快照:

UIView