从 UIImage 转换为 SwiftUI Image 会产生相同大小的空白图像

Eug*_*ene 8 uikit swiftui

我正在尝试使用init(uiImage:)初始值设定项将UIImage转换为SwiftUI Image。我的 UIImage 本身是从 CIQRCodeGenerator CIFilter 生成的 CIImage 创建的。我在 Xcode 11.1 GM 种子 1 的 Playground 上运行我的代码。这是我的全部代码:

import SwiftUI
import UIKit

func qrCodeImage(for string: String) -> Image? {
  let data = string.data(using: String.Encoding.utf8)
  guard let qrFilter = CIFilter(name: "CIQRCodeGenerator") else { return nil }
  qrFilter.setValue(data, forKey: "inputMessage")

  guard let ciImage = qrFilter.outputImage else { return nil }
  let uiImage = UIImage(ciImage: ciImage)
  let image = Image(uiImage: uiImage)

  return image
}

let image = qrCodeImage(for: "fdsa")
Run Code Online (Sandbox Code Playgroud)

结果如下:

在此处输入图片说明

即使我使用 转换图像CGAffineTransform(scaleX: 10, y: 10),最终生成的 SwiftUI 图像仍然大小相同,但为空白。

wk.*_*tal 12

以下解决方案提供于:使用 SwiftUI 生成二维码显示空图片

这是代码:

var ciContext = CIContext()

func qrCodeImage(for string: String) -> Image? {
    let data = string.data(using: String.Encoding.utf8)
    guard let qrFilter = CIFilter(name: "CIQRCodeGenerator") else { return nil }
    qrFilter.setValue(data, forKey: "inputMessage")

    guard let ciImage = qrFilter.outputImage else { return nil }
    let cgImage = ciContext.createCGImage(ciImage, from: ciImage.extent)

    let uiImage = UIImage(cgImage: cgImage!)

    let image = Image(uiImage: uiImage)

    return image
}

 let image = qrCodeImage(for: "fdsa")
Run Code Online (Sandbox Code Playgroud)

结果:

快速游乐场中的屏幕截图


小智 5

Image可以确认我在使用从数据初始化的SwiftUI 时遇到了同样的问题UIImage。可以验证在调试暂停时图像是否已加载,但在 SwiftUI Image 中不显示。

这个解决方案对我有用:明确指定图像渲染模式。就我而言,我添加了以下内容:.renderingMode(.original)