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