标签: uigraphicsimagerenderer

CGImageCreate: 无效图像 alphaInfo: kCGImageAlphaNone。它应该是 kCGImageAlphaNoneSkipLast

我正在尝试将 UIVIew 捕获为图像,然后我可以对其进行操作。我有在 Xcode 11.7/simulator(运行 iOS 13.7)中工作的代码,但是抛出这个错误:

CGImageCreate: 无效图像 alphaInfo: kCGImageAlphaNone。它应该是 kCGImageAlphaNoneSkipLast

在实际设备上运行会导致崩溃。

任何想法如何在没有 alpha 的情况下创建此图像或事后将其删除?

extension UIView  {
    // render the view within the view's bounds, then capture it as image
  func asImage() -> UIImage {
    let renderer = UIGraphicsImageRenderer(bounds: bounds)
    return renderer.image(actions: { rendererContext in
        layer.render(in: rendererContext.cgContext)
    })
  }
}
Run Code Online (Sandbox Code Playgroud)

它从这段代码中被调用:

@IBAction func reactionListButtonTapped(_ sender: UIButton) {
  guard let reactionVC = storyboard?.instantiateViewController(withIdentifier: "ReactionViewController")
    as? ReactionViewController else {
      
    assertionFailure("No view controller ID ReactionViewController in storyboard")
    return
  }

  // take …
Run Code Online (Sandbox Code Playgroud)

core-graphics ios swift uigraphicsimagerenderer

7
推荐指数
0
解决办法
751
查看次数

如何以编程方式使用 UIGraphicsImageRenderer 获取高质量屏幕截图?

问题:截取屏幕截图后,通过缩放检查时图像模糊。缩放时图像内的文字似乎变得模糊。

我知道这个问题已经被多次提出,但没有一个人想要得到解决。我已经检查了很多像这样的帖子

到目前为止,该论坛上共享的所有解决方案都是重复的或以任何其他方式相同,但没有一个解决方案可以解决该问题。

这是我正在做的事情:

extension UIView {

  func asImage() -> UIImage? {
    let format = UIGraphicsImageRendererFormat()
    format.opaque = self.isOpaque
    let renderer = UIGraphicsImageRenderer(bounds: bounds,format: format)
    return renderer.image(actions: { rendererContext in
        layer.render(in: rendererContext.cgContext)
    })
}

//The other option using UIGraphicsEndImageContext

func asImage() -> UIImage? {
    UIGraphicsBeginImageContextWithOptions(self.bounds.size, self.isOpaque, 0.0)
    defer { UIGraphicsEndImageContext() }
    if let context = UIGraphicsGetCurrentContext() {
        self.layer.render(in: context)
        return UIGraphicsGetImageFromCurrentImageContext()
    }
    return nil
}
}
Run Code Online (Sandbox Code Playgroud)

上面的函数将UIView转换为图像,但是返回的图像质量不合格。

uiimage cgcontext ios swift uigraphicsimagerenderer

7
推荐指数
1
解决办法
1517
查看次数

如何从 UIView 创建特定尺寸的图像

我正在开发 iOS 应用程序,该应用程序应该使用户能够创建 Instagram 故事照片并将其导出到 Instagram。基本上像 Unfold、Stellar、Chroma Stories 这样的应用程序...我已经准备好了 UI,用户可以从准备好的模板中进行选择,并向其中添加带有滤镜、标签等的自己的照片。

我的问题是 -将创建的 UIView 导出到更大图像的最佳方法是什么? 我的意思是如何获得最佳质量、清晰的标签像素等?因为带有子视图(添加的照片、标签...)的模板视图占据了设备屏幕的+-一半。但我需要更大的尺寸来导出图像。目前我使用:

 func makeImageFromView() -> UIImage {
    let format = UIGraphicsImageRendererFormat()
    let size = CGSize(width: 1080 / format.scale, height: 1920 / format.scale)

    let renderer = UIGraphicsImageRenderer(size: size, format: format)
    let image = renderer.image { (ctx) in
        templateView.drawHierarchy(in: CGRect(origin: .zero, size: size), afterScreenUpdates: true)
    }
    return image
}
Run Code Online (Sandbox Code Playgroud)

生成的图像尺寸为 1080 x 1920,但标签不清晰。在将其制作为图像之前,我是否需要以某种方式缩放照片和字体大小?谢谢!

uiview uiimage ios swift uigraphicsimagerenderer

3
推荐指数
1
解决办法
1723
查看次数