Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 将具有清晰背景色的UIView转换为UIImage会为生成的图像添加白色背景色_Swift - Fatal编程技术网

Swift 将具有清晰背景色的UIView转换为UIImage会为生成的图像添加白色背景色

Swift 将具有清晰背景色的UIView转换为UIImage会为生成的图像添加白色背景色,swift,Swift,我正在尝试将场景中的视图转换为UIImage,以便在snapchats API中用于标签。当从视图生成图像时,除了白色背景外,其他都正常。我不想要背景 我尝试将图像转换为jpeg格式,并检查背景是否清晰 let renderer = UIGraphicsImageRenderer(size: contentView.bounds.size) let image = renderer.image { ctx in contentView.drawHi

我正在尝试将场景中的视图转换为UIImage,以便在snapchats API中用于标签。当从视图生成图像时,除了白色背景外,其他都正常。我不想要背景

我尝试将图像转换为jpeg格式,并检查背景是否清晰

    let renderer = UIGraphicsImageRenderer(size: contentView.bounds.size)        
    let image = renderer.image { ctx in
        contentView.drawHierarchy(in: contentView.bounds, afterScreenUpdates: true)
    }
    let imageData = image.jpegData(compressionQuality: 0.75)!




    let stickerImage = UIImage(data:imageData,scale:1.0)!
    //let stickerImage = /* Prepare a sticker image */
    let sticker = SCSDKSnapSticker(stickerImage: stickerImage)
    /* Alternatively, use a URL instead */
    // let sticker = SCSDKSnapSticker(stickerUrl: stickerImageUrl, isAnimated: false)

    /* Modeling a Snap using SCSDKNoSnapContent */
    let snap = SCSDKNoSnapContent()
    snap.sticker = sticker /* Optional */
    snap.caption = "Snap on Snapchat!" /* Optional */
    snap.attachmentUrl = "https://www.snapchat.com"
    view.isUserInteractionEnabled = false
    snapAPI.startSending(snap) { [weak self] (error: Error?) in
        self?.view.isUserInteractionEnabled = true

        // Handle response
    }

编译并运行,只是UIView有一个白色的背景,它应该是清晰的

我不熟悉
SCSDK
,但这是我用来将UIView转换为图像的扩展,对于透明背景来说效果很好。假设您不打算使用该库,您可以尝试这种方法

extension UIImage {

    /// Creates a UIImage 'snapshot' of a UIView.
    convenience init(from view: UIView) {
        UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.isOpaque, 0.0)
        view.drawHierarchy(in: view.bounds, afterScreenUpdates: true)
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        self.init(cgImage: (image?.cgImage)!)
    }

}
致电:

let image = UIImage(from: myView)

让我知道这是否适用于您。

我不熟悉
SCSDK
,但这是我用于将UIView转换为图像的扩展,它适用于透明背景。假设您不打算使用该库,您可以尝试这种方法

extension UIImage {

    /// Creates a UIImage 'snapshot' of a UIView.
    convenience init(from view: UIView) {
        UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.isOpaque, 0.0)
        view.drawHierarchy(in: view.bounds, afterScreenUpdates: true)
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        self.init(cgImage: (image?.cgImage)!)
    }

}
致电:

let image = UIImage(from: myView)

让我知道这是否适用于您。

为什么要将
图像
UIImage
)转换为JPEG数据,以便您可以从JPEG数据创建新的
UIImage
?至少使用PNG数据,它实际上支持透明度,并且是一种更适合屏幕截图的格式。通过电子共享到Snapchat,你一直都能做到这一点吗?我正在尝试做一个非常类似的事情,它似乎在每一步都保持透明,直到Snapchat打开它,然后它有一个白色背景。如果我共享一个URL到web上某个地方托管的完全相同的图像,Snapchat将以透明方式加载它。。。但不是来自本地文件。@MaxSchmeling我必须更新snapkit pod,它在最近的一次更新中得到了修复update@ClayLoneman对对不起,我应该在这里跟进。。。我向他们提出了一个问题,他们让我知道更新即将到来。最新版本肯定解决了这个问题。为什么要将
image
UIImage
)转换为JPEG数据,以便从JPEG数据创建新的
UIImage
?至少使用PNG数据,它实际上支持透明度,并且是一种更适合屏幕截图的格式。通过电子共享到Snapchat,你一直都能做到这一点吗?我正在尝试做一个非常类似的事情,它似乎在每一步都保持透明,直到Snapchat打开它,然后它有一个白色背景。如果我共享一个URL到web上某个地方托管的完全相同的图像,Snapchat将以透明方式加载它。。。但不是来自本地文件。@MaxSchmeling我必须更新snapkit pod,它在最近的一次更新中得到了修复update@ClayLoneman对对不起,我应该在这里跟进。。。我向他们提出了一个问题,他们让我知道更新即将到来。最新版本肯定解决了这个问题。这很有效,谢谢!我相信.isOpaque声明解决了我的问题。这成功了,谢谢!我相信.isOpaque声明解决了我的问题。