티스토리 뷰

> 2018.8.24
> Swift 4.1
> Xcode 9.4.1



카메라로 Capture한 이미지에 내가원하는 정보를 넣고자할때.

* 문제는 이러했다. Custom Camera로 이미지를 캡쳐한 후에 이미지를 정방형으로 자른다음, 원본이미지에 내가 원하는 정보를 텍스트나, 이미지를 덧붙혀서 저장을 하고 싶었다. 하지만, 캡처 후에 이미지를 저장하는데 처리가 오래 걸리는 문제가 발생 


1. 원인은 다음과 같았다. iOS는 이미지를 그릴때, blending을 한다. 두가지 색상을 섞을때 섞을 색상의 투명도또한 반영하기 때문에
   내가 원하는 이미지에 투명도에 대한 것을 다시 그리기 때문에 속도가 두배이상 느렸던 것이다. 

 참고사이트 

사실상 위에서 본 정보를 가지고 문제를 해결하였다. 다음은 카메라 캡쳐 후 이미지를 합성할때 예제 코드이다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    private func drawWaterMark(drawImage previewImage: UIImage) -> UIImage? {
        guard let squareImage = editSquare(image: previewImage) else { return nil }
        let squareImageSize = squareImage.size
        let myLogo = UIImage(named: "imageLogo")
        let rendererConfig = UIGraphicsImageRendererFormat()

// opaque 그려질 이미지는 불투명한 이미지라는걸 지정해주는것. 그래서 속도가 빠르게 그려진다!!
        rendererConfig.opaque = true
        let renderer = UIGraphicsImageRenderer(size: squareImageSize, format: rendererConfig)
        let compositedImage = renderer.image { ctx in
            squareImage.draw(in: CGRect(x: 0, y: 0, width: squareImageSize.width, height: squareImageSize.height))
            myLogo?.draw(in: CGRect.setLogo(imageSize: squareImageSize))
        }
        return compositedImage
    }

cs

위의 코드에서 rendererConfig에 opaque를 속성을 true로 주는 것이 핵심이다.

Comments