Swift에서 단색으로 UIImage 생성
프로그래밍 방식으로 단색으로 UIImage를 만들고 싶습니다. 누구나 Swift 에서이 작업을 수행하는 방법에 대한 아이디어가 있습니까?
Swift 2.2 와 호환되는 또 다른 멋진 솔루션 은 다음과 같이 UIImage에서 다른 생성 가능한 제품입니다.
public extension UIImage {
public convenience init?(color: UIColor, size: CGSize = CGSize(width: 1, height: 1)) {
let rect = CGRect(origin: .zero, size: size)
UIGraphicsBeginImageContextWithOptions(rect.size, false, 0.0)
color.setFill()
UIRectFill(rect)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
guard let cgImage = image?.CGImage else { return nil }
self.init(CGImage: cgImage)
}
}
이런 식으로 다음과 같은 방법으로 사용자 지정 컬러 이미지를 만들 수 있습니다.
let redImage = UIImage(color: .redColor())
또는 선택적으로 사용자 정의 크기로 이미지를 작성하십시오.
let redImage200x200 = UIImage(color: .redColor(), size: CGSize(width: 200, height: 200))
스위프트 3.0
public extension UIImage {
public convenience init?(color: UIColor, size: CGSize = CGSize(width: 1, height: 1)) {
let rect = CGRect(origin: .zero, size: size)
UIGraphicsBeginImageContextWithOptions(rect.size, false, 0.0)
color.setFill()
UIRectFill(rect)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
guard let cgImage = image?.cgImage else { return nil }
self.init(cgImage: cgImage)
}
}
다른 옵션이 있습니다. 나는 당신이 정확한 UIImage를 원합니다.
func getImageWithColor(color: UIColor, size: CGSize) -> UIImage {
let rect = CGRectMake(0, 0, size.width, size.height)
UIGraphicsBeginImageContextWithOptions(size, false, 0)
color.setFill()
UIRectFill(rect)
let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
관리자는 스위프트 코드에 붙이고 호출하십시오.
스위프트 3.1 :
func getImageWithColor(color: UIColor, size: CGSize) -> UIImage {
let rect = CGRect(x: 0, y: 0, width: size.width, height: size.height)
UIGraphicsBeginImageContextWithOptions(size, false, 0)
color.setFill()
UIRectFill(rect)
let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
return image
}
스위프트 4 버전 :
extension UIColor {
func image(_ size: CGSize = CGSize(width: 1, height: 1)) -> UIImage {
return UIGraphicsImageRenderer(size: size).image { rendererContext in
self.setFill()
rendererContext.fill(CGRect(origin: .zero, size: size))
}
}
}
용법 :
let image0 = UIColor.orange.image(CGSize(width: 128, height: 128))
let image1 = UIColor.yellow.image()
보다 확실한 접근 방식은 UIImage확장 논리를 캡슐화하는 것입니다 .
import UIKit
extension UIImage {
class func imageWithColor(color: UIColor) -> UIImage {
let rect: CGRect = CGRectMake(0, 0, 1, 1)
UIGraphicsBeginImageContextWithOptions(CGSizeMake(1, 1), false, 0)
color.setFill()
UIRectFill(rect)
let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
}
이제 소비자는 UIImage.imageWithColor(UIColor.blackColor())검은 색 배경의 이미지를 만들기 위해 전화를 걸 수 있습니다 .
class ViewController: UIViewController {
@IBOutlet weak var imageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
imageView.backgroundColor = UIColor.redColor()
}
}
이미지를 직접 그리거나 IBOutlet을 통해 이미지를 연결하려는 경우 방법입니다.
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
var frame = CGRectMake(100,100,100,100)
var imageView2 = UIImageView(frame: frame)
imageView2.backgroundColor = UIColor.redColor()
self.view.addSubview(imageView2)
}
}
anthonyliao에서 빌리는 세 번째 방법. 좀 더 복잡합니다.
class ViewController: UIViewController {
func getImageWithColor(color: UIColor, size: CGSize) -> UIImage {
UIGraphicsBeginImageContextWithOptions(size, false, 0)
color.setFill()
UIRectFill(CGRectMake(0, 0, 100, 100))
var image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
override func viewDidLoad() {
super.viewDidLoad()
var imageView = UIImageView(frame: CGRectMake(100,100,100,100))
let screenImage = getImageWithColor(UIColor.redColor(), size: CGSize(width: 100, height: 100))
imageView.image = screenImage
self.view.addSubview(imageView)
}
}
새로운 iOS 10 UIGraphicsImageRenderer API를 사용할 수 있습니다 .
다음은 Swift 3.1의 UIColor에 대한 확장입니다.
extension UIColor {
func getImage(size: CGSize) -> UIImage {
let renderer = UIGraphicsImageRenderer(size: size)
return renderer.image(actions: { rendererContext in
self.setFill()
rendererContext.fill(CGRect(x: 0, y: 0, width: size.width, height: size.height))
})
}}
좋은 방법은 다음과 같이 계산 된 속성을 갖는 것입니다.
extension UIColor {
var imageRepresentation : UIImage {
let rect = CGRect(x: 0.0, y: 0.0, width: 1.0, height: 1.0)
UIGraphicsBeginImageContext(rect.size)
let context = UIGraphicsGetCurrentContext()
context?.setFillColor(self.cgColor)
context?.fill(rect)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image!
}
}
용법:
let redImage = UIColor.red.imageRepresentation
@neoneye의 우수한 답변을 약간 조정하여 호출 코드가 CGSize를 만들 필요가 없도록하고 이름이 다른 많은 것과 충돌하지 않도록 변경했습니다.
스위프트 4
extension UIColor {
func imageWithColor(width: Int, height: Int) -> UIImage {
let size = CGSize(width: width, height: height)
return UIGraphicsImageRenderer(size: size).image { rendererContext in
self.setFill()
rendererContext.fill(CGRect(origin: .zero, size: size))
}
}
}
@anthonyliao의 Swift 3 버전 수락 된 답변 :
class func getImageWithColor(color: UIColor, size: CGSize) -> UIImage
{
let rect = CGRect(origin: CGPoint(x: 0, y: 0), size: CGSize(width: size.width, height: size.height))
UIGraphicsBeginImageContextWithOptions(size, false, 0)
color.setFill()
UIRectFill(rect)
let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
return image
}
참고 URL : https://stackoverflow.com/questions/26542035/create-uiimage-with-solid-color-in-swift
'IT' 카테고리의 다른 글
| 안드로이드 스튜디오에서 2 개의 패싯 알 수없는 패싯 유형을로드 할 수 없습니다 : android 및 android-gradle (0) | 2020.07.18 |
|---|---|
| IIS 8.0에서 글꼴 얼굴이 작동하지 않습니다. (0) | 2020.07.18 |
| MySQL 테이블이 충돌로 표시되고 마지막 (자동?) 복구 실패 (0) | 2020.07.18 |
| PHP에서 문을 어기는 방법은 무엇입니까? (0) | 2020.07.18 |
| 소스 이미지가없는 경우 대체 이미지를 표시하는 방법은 무엇입니까? (0) | 2020.07.18 |