iOS

[iOS] UIView를 UIImage로 만들기: 이미지 백그라운드컬러 바꾸기

ohlee52 2024. 6. 29. 18:18
반응형

 

환경

>Swift, UIKit

 

이슈

>UIView를 UIImage로 만들어서 PDF파일을 생성하는 과정에서 백그라운드색 통제가 안됨

 

삽질

> UIView 백그라운드가 안먹는줄 알고(투명이었음), 백그라운드컬러 설정 시점을 여러번 바꿔봄

>뷰 백그라운드는 문제 없었고 이미지 배경색이 문제였음

 

해결

>이미지 렌더링 과정에서 이미지 백그라운드 설정

 

    func asImage() -> UIImage {
        let renderer = UIGraphicsImageRenderer(bounds: bounds)
        return renderer.image { rendererContext in
            // 배경색 설정
            UIColor.white.setFill()
            rendererContext.fill(bounds)
            layer.render(in: rendererContext.cgContext)
        }    
    }
    
     func makeImages(diaries: [Diary], font: UIFont, bookID: String)-> [PDFImage] { 
        
        var images: [PDFImage] = []
        for diary in diaries {
            let image = AppFileManager.share.loadImageFromDoument(fileName: Constants.FileNames.imageName(id: diary.objectId.stringValue)) ?? UIImage(named: "damda_text")
            let view = PDFView(date: diary.date, question: diary.card?.question, text: diary.text, image: image, font: font)

            let viewImage = view.asImage()
            images.append(PDFImage(image: viewImage, size: .zero, quality: 1, options: [.compress]))
        }

        let emptyView = PDFView(date: nil, question: nil, text: "", image: nil, font: font)
        let emptyViewImage = emptyView.asImage()
        while (images.count % 2) != 0  {
            images.append(PDFImage(image: emptyViewImage, size: .zero, quality: 1, options: [.compress]))
        }

        return images
        
    }
반응형