iOS SwiftUI [SwiftUI] ImageRender Image 화질 문제 for scale

[SwiftUI] ImageRender Image 화질 문제 for scale

iOS 16 버전부터 SwiftUI 전용 ImageRenderer 를 통해 뷰를 이미지로 캡쳐 할 수 있다.
일반적인 사용법은 아래와 같다.

ImageRenderer

struct ContentView: View {
  @Environment(\.displayScale)
  var displayScale: CGFloat
  
  @State 
  var renderedImage = Image(systemName: "photo")
  
  var body: some View {
    Text("Hello ImageRender")
      .onAppear {
        let renderer = ImageRenderer(content: Text("Hello ImageRender"))

        // make sure and use the correct display scale for this device
        renderer.scale = displayScale
        
        if let uiImage = renderer.uiImage {
          renderedImage = Image(uiImage: uiImage)
        }
      }
  }
}

displayScale

sacle

  • ImageRenderersacle을 세팅해도 이미지가 매우 저화질로 생성된다.

AsyncImageRenderer

이 문제를 해결하려면 AsyncImageRenderer를 사용해 해결할 수 있다.
aysnc/await를 사용해 해결하였다.

AsyncImageRenderer ImageRenderer
Image Image
Fixed Original
import AsyncImageRenderer

struct ContentView: View {
  @State 
  var renderedImage = Image(systemName: "photo")
  
  var body: some View {
    Text("Hello ImageRender")
      .onAppear {
        Task {
          if let image = await AsyncImageRenderer.image(Text("Hello ImageRender")) {
            self.renderedImage = image
          }
        }
      }
  }
}

Image
추후 ImageRender는 애플에서 더 좋게 개선해 줄 것이니 믿고 기다려 보자.

댓글남기기