iOS 및 WatchKit에서 이미지 tintColor를 변경하는 방법


395

"theImageView"라는 UIImageView가 있는데 아래 왼쪽 검은 색 하트와 같은 단일 색상 (투명한 배경)으로 UIImage를 사용합니다. iOS 7+ 탐색 막대 아이콘에 사용 된 색조 방법에 따라 iOS 7 이상에서이 이미지의 색조 색상을 프로그래밍 방식으로 변경하려면 어떻게해야합니까?

Apple Watch 앱의 WatchKit에서도이 방법을 사용할 수 있습니까?

여기에 이미지 설명을 입력하십시오


4
당신은 설정, "다음 코드가 잘못"무슨 뜻 UIImage으로 UIImageRenderingModeAlwaysTemplate다음 설정 UIImageVIewtintColor않습니다 작업. (내 코드에서 ^^)
Vinzzz


4
나는 그것이 가장 현대적이라고 생각하기 때문에 답을 답 부분으로 옮겨야합니다.
Richard Venable

나는이 질문을 두 배로 높일 수 있기를 바랍니다!
Jacobo Koenig

답변:


763

iOS
Swift 3, 4 또는 5의 iOS 앱 :

theImageView.image = theImageView.image?.withRenderingMode(.alwaysTemplate)
theImageView.tintColor = UIColor.red

스위프트 2의 경우 :

theImageView.image = theImageView.image?.imageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate)
theImageView.tintColor = UIColor.redColor()

한편, 최신 Objective-C 솔루션은 다음과 같습니다.

theImageView.image = [theImageView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
[theImageView setTintColor:[UIColor redColor]];

Watchkit
Apple Watch 앱용 WatchKit 에서 템플릿 이미지색조 색상을 설정할 수 있습니다 .

  1. WatchKit 앱에서 자산 카탈로그에 이미지를 추가하고 속성 관리자에서 이미지 세트가 템플릿 이미지로 렌더링되도록 설정해야합니다. iPhone 앱과 달리 현재 WatchKit Extension에서 템플릿 렌더링을 코드로 설정할 수 없습니다.
  2. 앱의 인터페이스 빌더에서 WKInterfaceImage에 사용되도록 해당 이미지를 설정하십시오.
  3. 'theImage'라는 WKInterfaceImage에 대해 WKInterfaceController에 IBOutlet을 작성하십시오.

그런 다음 Swift 3 또는 4에서 색조 색상을 설정하려면

theImage.setTintColor(UIColor.red)

스위프트 2 :

theImage.setTintColor(UIColor.redColor())

그런 다음 Objective-C에서 색조 색상을 설정하려면

[self.theImage setTintColor:[UIColor redColor]];

템플릿 이미지를 사용하고 색조를 적용하지 않으면 WatchKit 앱의 전역 색조가 적용됩니다. 전역 색조를 설정하지 않으면 theImage템플릿 이미지로 사용할 때 기본적으로 밝은 파란색으로 표시됩니다.


2
이것이 가장 좋고 간단한 해결책입니다.
Ankish Jain

4
imageWithRenderingMode가 너무 느립니다. 스토리 보드 및 이미지 자산. 렌더 모드를 템플릿 이미지로 업데이트-더 나은 솔루션
Katerina

완벽합니다. 이제 코드에 따라이 방법을 사용합니다. + (UIImageView ) tintImageView : (UIImageView *) imageView withColor : (UIColor ) color {imageView.image = [imageView.image imageWithRenderingMode : UIImageRenderingModeAlwaysTemplate]; [imageView setTintColor : color]; return imageView; }
Josep Escobar

이미지 검정이 더 좋습니까?
Bruno

1
@Bruno 이미지는 검은 색일 필요는 없습니다. 모든 색상으로 작동합니다.
던컨 배비지

121

트릭을 수행해야하는 범주는 다음과 같습니다.

@interface UIImage(Overlay)
@end

@implementation UIImage(Overlay)

- (UIImage *)imageWithColor:(UIColor *)color1
{
        UIGraphicsBeginImageContextWithOptions(self.size, NO, self.scale);
        CGContextRef context = UIGraphicsGetCurrentContext();
        CGContextTranslateCTM(context, 0, self.size.height);
        CGContextScaleCTM(context, 1.0, -1.0);
        CGContextSetBlendMode(context, kCGBlendModeNormal);
        CGRect rect = CGRectMake(0, 0, self.size.width, self.size.height);
        CGContextClipToMask(context, rect, self.CGImage);
        [color1 setFill];
        CGContextFillRect(context, rect);
        UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return newImage;
}
@end

그래서 당신은 할 것입니다 :

theImageView.image = [theImageView.image imageWithColor:[UIColor redColor]];

이 매우 유효한 답변에 감사드립니다. 처음부터 코드가 정상이라고 생각합니다. 내 질문에 대답하고 +1을 제공해야합니다.
chewy

104

Swift에서을 사용 하여이 작업을 수행해야했습니다 extension.

나는 내가 한 일을 나눌 것이라고 생각했다.

extension UIImage {
    func imageWithColor(color1: UIColor) -> UIImage {
        UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale)
        color1.setFill()

        let context = UIGraphicsGetCurrentContext() as CGContextRef
        CGContextTranslateCTM(context, 0, self.size.height)
        CGContextScaleCTM(context, 1.0, -1.0);
        CGContextSetBlendMode(context, CGBlendMode.Normal)

        let rect = CGRectMake(0, 0, self.size.width, self.size.height) as CGRect
        CGContextClipToMask(context, rect, self.CGImage)
        CGContextFillRect(context, rect)

        let newImage = UIGraphicsGetImageFromCurrentImageContext() as UIImage
        UIGraphicsEndImageContext()

        return newImage
    }
}

용법:

theImageView.image = theImageView.image.imageWithColor(UIColor.redColor())

스위프트 4

extension UIImage {
    func imageWithColor(color1: UIColor) -> UIImage {
        UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale)
        color1.setFill()

        let context = UIGraphicsGetCurrentContext()
        context?.translateBy(x: 0, y: self.size.height)
        context?.scaleBy(x: 1.0, y: -1.0)
        context?.setBlendMode(CGBlendMode.normal)

        let rect = CGRect(origin: .zero, size: CGSize(width: self.size.width, height: self.size.height))
        context?.clip(to: rect, mask: self.cgImage!)
        context?.fill(rect)

        let newImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()

        return newImage!
    }
}

용법:

theImageView.image = theImageView.image?.imageWithColor(color1: UIColor.red)


1
참고로 color1.setFill()메소드의 첫 번째 줄 바로 아래 로 이동하기 전까지는 작동하지 않았습니다 UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale).
Aaron

@Aaron 귀하의 의견에 따라 업데이트되었습니다. 감사.
fulvio 2016 년

7
@CeceXX CGBlendMode.Normal대신 사용
Adolfo

2
굉장하지만 Swift 3
SimpuMind

1
@SimpiMind Swift 4를 대신 제공했습니다.
fulvio

97

스토리 보드 및 이미지 자산. 이 두 가지를 변경할 수도 있습니다.

렌더링 모드를 템플릿 이미지로 업데이트

이미지 자산에서 렌더링 모드를 템플릿 이미지로 업데이트

뷰에서 색조 색상을 업데이트하십시오.

뷰의 뷰에서 색조 색상 업데이트


22
이것은 진지하게 가장 나쁜 대답입니다!
brandonscript

1
스토리 보드 에서이 값을 설정하면 결코 효과가 없습니다. 항상 imageView.tintColor코드 를 사용해야 합니다.
Kamil Powałowski

3
@ KamilPowałowski 저에게 이것은 때때로 작동합니다 ... 왜 그런지 잘 모르겠습니다. 왜 항상 작동하지 않는지 알고 싶습니다. 그래서 코드로
Jesus Rodriguez

2
나 에게이 스토리 보드 방법은 단추에서는 작동하지만 imageView에서는 작동하지 않습니다. imageViews 코드에서 tintColor를 설정해야합니다.
Derek Soike

2
IB에서 왜 작동하지 않는지 궁금해하는 사람이 여전히 머리를 긁고 있다면 imageView의 Opaque를 No로 설정하십시오.
Bonan

40

스위프트 4

고유 한 색상의 이미지에서 작동하는 UIImage SVG / PDF의 색조를 변경하십시오 .

여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오

import Foundation

// MARK: - UIImage extensions

public extension UIImage {

    //
    /// Tint Image
    ///
    /// - Parameter fillColor: UIColor
    /// - Returns: Image with tint color
    func tint(with fillColor: UIColor) -> UIImage? {
        let image = withRenderingMode(.alwaysTemplate)
        UIGraphicsBeginImageContextWithOptions(size, false, scale)
        fillColor.set()
        image.draw(in: CGRect(origin: .zero, size: size))

        guard let imageColored = UIGraphicsGetImageFromCurrentImageContext() else {
            return nil
        }

        UIGraphicsEndImageContext()
        return imageColored
    }
}

고유 한 색상의 이미지에서 작동 하는 UIImageView의 색조를 변경하십시오 .

여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오

let imageView = UIImageView(frame: CGRect(x: 50, y: 50, width: 50, height: 50))
imageView.image = UIImage(named: "hello.png")!.withRenderingMode(.alwaysTemplate)
imageView.tintColor = .yellow

변경 색조 를 UIImage 에 대한 사진 , 그것을 사용 :

여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오

import Foundation

// MARK: - Extensions UIImage

public extension UIImage {

    /// Tint, Colorize image with given tint color
    /// This is similar to Photoshop's "Color" layer blend mode
    /// This is perfect for non-greyscale source images, and images that 
    /// have both highlights and shadows that should be preserved<br><br>
    /// white will stay white and black will stay black as the lightness of 
    /// the image is preserved
    ///
    /// - Parameter TintColor: Tint color
    /// - Returns:  Tinted image
    public func tintImage(with fillColor: UIColor) -> UIImage {

        return modifiedImage { context, rect in
            // draw black background - workaround to preserve color of partially transparent pixels
            context.setBlendMode(.normal)
            UIColor.black.setFill()
            context.fill(rect)

            // draw original image
            context.setBlendMode(.normal)
            context.draw(cgImage!, in: rect)

            // tint image (loosing alpha) - the luminosity of the original image is preserved
            context.setBlendMode(.color)
            fillColor.setFill()
            context.fill(rect)

            // mask by alpha values of original image
            context.setBlendMode(.destinationIn)
            context.draw(context.makeImage()!, in: rect)
        }
    }

    /// Modified Image Context, apply modification on image
    ///
    /// - Parameter draw: (CGContext, CGRect) -> ())
    /// - Returns:        UIImage
    fileprivate func modifiedImage(_ draw: (CGContext, CGRect) -> ()) -> UIImage {

        // using scale correctly preserves retina images
        UIGraphicsBeginImageContextWithOptions(size, false, scale)
        let context: CGContext! = UIGraphicsGetCurrentContext()
        assert(context != nil)

        // correctly rotate image
        context.translateBy(x: 0, y: size.height)
        context.scaleBy(x: 1.0, y: -1.0)

        let rect = CGRect(x: 0.0, y: 0.0, width: size.width, height: size.height)

        draw(context, rect)

        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return image!
    }
}

1
이봐, 난 빨리 새로운,하지만 당신은 여기 SVG 이미지에 대한 것이라고 말했지만 SVG를 UIImage로 구문 분석하는 방법을 찾을 수 없습니다, 당신은 나를 도울 수 있습니까? 또는 어쨌든 SVG로 올바르게 처리 할 수 ​​있습니다. 감사!
Dumitru Rogojinaru

자산에서 템플릿 이미지와 @DumitruRogojinaru 사용 SVG의 fonction
YannSteph

"func modifiedImage"를 번역하고 확장해야하는 이유는 무엇입니까?
Luca Davanzo

스위프트 4 업데이트
YannSteph

36

누군가가없는 솔루션을 관리하는 경우 UIImageView:

// (Swift 3)
extension UIImage {
    func tint(with color: UIColor) -> UIImage {
        var image = withRenderingMode(.alwaysTemplate)
        UIGraphicsBeginImageContextWithOptions(size, false, scale)
        color.set()

        image.draw(in: CGRect(origin: .zero, size: size))
        image = UIGraphicsGetImageFromCurrentImageContext()!
        UIGraphicsEndImageContext()
        return image
    }
}

와우, 이것을 1 시간 이상 검색 한 후에 마술처럼 작동합니다. 필요 : NSTextAttachment에서 아이콘을 원래 아이콘과 다른 색으로 설정합니다. NSTextAttachment는 UIImageView를 사용하지 않기 때문에 UIImageView를 사용하고 tintColor를 변경하는 표준 답변은 여기서 작동하지 않습니다.
marco

1
이것은 지금까지 Swift 3에서 작동하는 코드를 찾는 사람에게 가장 적합한 솔루션입니다.
shashwat

17

스위프트

let commentImageView = UIImageView(frame: CGRectMake(100, 100, 100, 100))
commentImageView.image = UIImage(named: "myimage.png")!.imageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate)
commentImageView.tintColor = UIColor.blackColor()
addSubview(commentImageView)

3
간단히 넣을 수 있습니다 .AlwaysTemplate.
Rui Peres

예, 코드가 짧아 지지만 코드의 선명도가 떨어질 수 있습니다. 그 점 때문에 바로 가기에 대해 확실하지 않습니다
Esqarrouth

나는 당신의 POV, 대안 일뿐입니다.
Rui Peres

4

이 시도

http://robots.thoughtbot.com/designing-for-ios-blending-modes

또는

- (void)viewDidLoad
{
[super viewDidLoad];

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10, 30, 300, 50)];
label.numberOfLines = 0;
label.font = [UIFont systemFontOfSize:13];
label.text = @"These checkmarks use the same gray checkmark image with a tintColor applied to the image view";
[self.view addSubview:label];

[self _createImageViewAtY:100 color:[UIColor purpleColor]];
}

- (void)_createImageViewAtY:(int)y color:(UIColor *)color {
UIImage *image = [[UIImage imageNamed:@"gray checkmark.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
CGRect frame = imageView.frame;
frame.origin.x = 100;
frame.origin.y = y;
imageView.frame = frame;

if (color)
    imageView.tintColor = color;

[self.view addSubview:imageView];
}

4

신속한 3 목적을 위해

theImageView.image = theImageView.image!.withRenderingMode(.alwaysTemplate) theImageView.tintColor = UIColor.red


2

UIButton 이미지 틴팅

let image1 = "ic_shopping_cart_empty"
btn_Basket.setImage(UIImage(named: image1)?.withRenderingMode(.alwaysTemplate), for: .normal)
btn_Basket.setImage(UIImage(named: image1)?.withRenderingMode(.alwaysTemplate), for: .selected)
btn_Basket.imageView?.tintColor = UIColor(UIColor.Red)

2

iOS

Interface Builder에서이를 수행하기위한 솔루션, keyPath에서 templateImage 매개 변수 설정 및 IB에서 색조 색상 선택

extension UIImageView {

// make template image with tint color
var templateImage: Bool {
    set {
        if newValue, let image = self.image {
            let newImage = image.withRenderingMode(.alwaysTemplate)
            self.image = newImage
        }
    } get {
        return false
    }
}

}


2

iOS 13 이상에서는 간단하게 사용할 수 있습니다

let image = UIImage(named: "Heart")?.withRenderingMode(.alwaysTemplate)
if #available(iOS 13.0, *) {
   imageView.image = image?.withTintColor(UIColor.white)
}

1

Swift에서 확장 기능 활용 :-

extension UIImageView {
    func changeImageColor( color:UIColor) -> UIImage
    {
        image = image!.withRenderingMode(.alwaysTemplate)
        tintColor = color
        return image!
    }
}

   //Change color of logo 
   logoImage.image =  logoImage.changeImageColor(color: .red)

여기에 이미지 설명을 입력하십시오


1

퍼즈 에서 Swift 3 버전의 확장 프로그램 답변

func imageWithColor(color: UIColor) -> UIImage {
    UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale)
    color.setFill()

    let context = UIGraphicsGetCurrentContext()! as CGContext
    context.translateBy(x: 0, y: self.size.height)
    context.scaleBy(x: 1.0, y: -1.0);
    context.setBlendMode(.normal)

    let rect = CGRect(x: 0, y: 0, width: self.size.width, height: self.size.height) as CGRect
    context.clip(to: rect, mask: self.cgImage!)
    context.fill(rect)

    let newImage = UIGraphicsGetImageFromCurrentImageContext()! as UIImage
    UIGraphicsEndImageContext()

    return newImage
}

0

이제 Duncan Babbage 응답을 기반으로 한이 방법을 사용합니다.

+ (UIImageView *) tintImageView: (UIImageView *)imageView withColor: (UIColor*) color{
    imageView.image = [imageView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
    [imageView setTintColor:color];
    return imageView;
}

0

지우기 버튼을 대체 할 이미지가있는 경우 Swift 3에서이를 사용할 수 있습니다

func addTextfieldRightView(){

    let rightViewWidth:CGFloat = 30

    let viewMax = self.searchTxt.frame.height
    let buttonMax = self.searchTxt.frame.height - 16

    let buttonView = UIView(frame: CGRect(
        x: self.searchTxt.frame.width - rightViewWidth,
        y: 0,
        width: viewMax,
        height: viewMax))

    let myButton = UIButton(frame: CGRect(
        x: (viewMax - buttonMax) / 2,
        y: (viewMax - buttonMax) / 2,
        width: buttonMax,
        height: buttonMax))

    myButton.setImage(UIImage(named: "BlueClear")!, for: .normal)

    buttonView.addSubview(myButton)

    let clearPressed = UITapGestureRecognizer(target: self, action: #selector(SearchVC.clearPressed(sender:)))
    buttonView.isUserInteractionEnabled = true
    buttonView.addGestureRecognizer(clearPressed)

    myButton.addTarget(self, action: #selector(SearchVC.clearPressed(sender:)), for: .touchUpInside)

    self.searchTxt.rightView = buttonView
    self.searchTxt.rightViewMode = .whileEditing
}

0

코드 및 인터페이스 빌더에서도 사용할 수있는 서브 클래스 :

@implementation TintedImageView

- (instancetype)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        [self setup];
    }
    return self;
}

- (instancetype)initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];
    if (self) {
        [self setup];
    }
    return self;
}

-(void)setup {
    self.image = [self.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
}

@end

0

이것은 내 UIImage 확장이며 이미지에 changeTintColor 함수를 직접 사용할 수 있습니다.

extension UIImage {

    func changeTintColor(color: UIColor) -> UIImage {
        var newImage = self.withRenderingMode(.alwaysTemplate)
        UIGraphicsBeginImageContextWithOptions(self.size, false, newImage.scale)
        color.set()
        newImage.draw(in: CGRect(x: 0.0, y: 0.0, width: self.size.width, height: self.size.height))
        newImage = UIGraphicsGetImageFromCurrentImageContext()!
        UIGraphicsEndImageContext()
        return newImage
    }

    func changeColor(color: UIColor) -> UIImage {
        let backgroundSize = self.size
        UIGraphicsBeginImageContext(backgroundSize)
        guard let context = UIGraphicsGetCurrentContext() else {
            return self
        }
        var backgroundRect = CGRect()
        backgroundRect.size = backgroundSize
        backgroundRect.origin.x = 0
        backgroundRect.origin.y = 0

        var red: CGFloat = 0
        var green: CGFloat = 0
        var blue: CGFloat = 0
        var alpha: CGFloat = 0
        color.getRed(&red, green: &green, blue: &blue, alpha: &alpha)
        context.setFillColor(red: red, green: green, blue: blue, alpha: alpha)
        context.translateBy(x: 0, y: backgroundSize.height)
        context.scaleBy(x: 1.0, y: -1.0)
        context.clip(to: CGRect(x: 0.0, y: 0.0, width: self.size.width, height: self.size.height),
                 mask: self.cgImage!)
        context.fill(backgroundRect)

        var imageRect = CGRect()
        imageRect.size = self.size
        imageRect.origin.x = (backgroundSize.width - self.size.width) / 2
        imageRect.origin.y = (backgroundSize.height - self.size.height) / 2

        context.setBlendMode(.multiply)
        context.draw(self.cgImage!, in: imageRect)

        let newImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return newImage!
    }

}

이와 같은 사용 예

let image = UIImage(named: "sample_image")
imageView.image = image.changeTintColor(color: UIColor.red)

그리고 당신은 changeColor이미지 색상을 변경하기 위해 변경 기능을 사용할 수 있습니다


0

profileImageView.image = theImageView.image! .withRenderingMode (.alwaysTemplate)
profileImageView.tintColor = UIColor.green

또는

먼저 이미지 자산에서 특정 이미지를 선택한 다음 쓰기 행 뒤에 기본값 대신 템플릿으로 다시 표시를 선택하십시오. profileImageView.tintColor = UIColor.green


0

SVG 이미지의 ID가 있으면 ID와 관련하여 색상을 채울 수 있습니다.

    let image = SVGKImage(named: "iconName")
    let svgIMGV = SVGKFastImageView(frame: self.imgView.frame)
         svgIMGV.image = image
          svgIMGV.fillTintColor(colorImage: UIColor.red, iconID: "Bank")
// Add in extension SVGKImageView
extension SVGKImageView {
 func fillTintColor(colorImage: UIColor, iconID: String) {
        if self.image != nil && self.image.caLayerTree != nil {
            print(self.image.caLayerTree.sublayers)
            guard let sublayers = self.image.caLayerTree.sublayers else { return }
            fillRecursively(sublayers: sublayers, color: colorImage, iconID: iconID)
        }
    }

     private func fillRecursively(sublayers: [CALayer], color: UIColor, iconID: String, hasFoundLayer: Bool) {
        var isLayerFound = false
        for layer in sublayers {
            if let l = layer as? CAShapeLayer {

                print(l.name)                
                //IF you want to color the specific shapelayer by id else remove the l.name  == "myID"  validation
                if let name =  l.name,  hasFoundLayer == true && name == "myID" {
                    self.colorThatImageWIthColor(color: color, layer: l)
                    print("Colouring FInished")
                }
            } else {
                if layer.name == iconID {
                    if let innerSublayer = layer.sublayers as? [CAShapeLayer] {
                        fillRecursively(sublayers: innerSublayer, color: color, iconID: iconID, hasFoundLayer: true )
                        print("FOund")
                    }
                } else {
                    if let l = layer as? CALayer, let sub = l.sublayers {
                        fillRecursively(sublayers: sub, color: color, iconID: iconID, hasFoundLayer: false)
                    }
                }
            }

        }
    }

    func colorThatImageWIthColor(color: UIColor, layer: CAShapeLayer) {
        if layer.strokeColor != nil {
            layer.strokeColor = color.cgColor
        }
        if layer.fillColor != nil {
            layer.fillColor = color.cgColor
        }
    }

}

또는이 예를 확인하십시오.

https://github.com/ravisfortune/SVGDEMO


0
let navHeight = self.navigationController?.navigationBar.frame.height;
let menuBtn = UIButton(type: .custom)
menuBtn.frame = CGRect(x: 0, y: 0, width: 45, height: navHeight!)     
menuBtn.setImage(UIImage(named:"image_name")!.withRenderingMode(.alwaysTemplate), for: .normal)        
menuBtn.tintColor = .black
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.