본문 바로가기
flutter/Widget of the Week

Flutter[플러터] / ColorFiltered 를 사용하여 이미지 색 조정하기 (조절, 컬러, Hue, BlendMode, 블랜드 모드) ColorFiltered (Flutter Widget of the Week)

by ch5c 2025. 6. 18.
반응형

ColorFiltered class

자식에 ColorFilter를 적용합니다.

이 위젯은 지정된 ColorFilter 에 따라 child 콘텐츠 의 각 픽셀에 독립적으로 함수를 적용합니다. BlendMode를 사용하여 Color를 적용하려면 ColorFilter.mode 생성자를 사용하세요. child 아래에 있는 콘텐츠에 ColorFilter를 적용해야 하는 경우에는 BackdropFilter 위젯을 대신 사용하세요.

https://youtu.be/F7Cll22Dno8

공식 문서 코드

 


기본적으로 플러터에서는 이미지에 color 값으로 색을 넣어줄 수 있다. 그런데 막상 해보면 자신이 원하는 그런 색이 입혀지거나 변동되는 것이 아닌 그냥 그 색이 되어버리는 불상사가 발생하곤 한다. 예를 들어 아래 코드처럼 작성했다고 치자.

Image.asset('assets/faker.jpeg', color: Colors.red,),

그럼 우리는 이렇게 생각한다.

하지만 결과는 모두가 알 것이다. 그냥 빨간색 그 자체가 나올 뿐이라는 것을. 여기서 위 사진의 상상 속에 나오는 것처럼 이미지에 색을 조절하는, 정확히는 색 필터를 입힐 수 있게 하는 위젯이 있다. 그것이 바로 ColorFiltered 위젯이다.

이 ColorFiltered 위젯은 Flutter에서 자식 위젯에 색상 필터(ColorFilter)를 적용하여 시각적인 효과를 줄 수 있는 위젯이다. 주로 이미지나 위젯의 색상을 조정하거나 변형할 때 사용된다. 바로 알아보자.

하위 속성
속성명 타입 기본값 설명
colorFilter ColorFilter 자식 위젯에 적용할 색상 필터 객체
child Widget? null 색상 필터가 적용될 대상 자식 위젯

하위 속성으로는 정말 딱 우리가 필요한 colorFilter 값만 존재하고 있다. 우리는 흔히 ColorFilter 를 사용할 때 mode 를 붙여서 상수로 사용하는데 ColorFilter.mode 안에 있는 BlendMode 의 상수를 입력하는 것도 은근 일이다..

가장 기본적인 사용법이다.

ColorFiltered(
  colorFilter: ColorFilter.mode(Colors.red, BlendMode.color),
  child: Image.asset('assets/faker.jpeg'),
),

그저 자신이 필터를 씌우고 싶은 사진에 ColorFiltered 위젯으로 감싼 후 colorFilter 에 값을 넣어주면 금방 된다.

여기서 색이 바뀌는 것은 BlenMode 의 의해 정해지게 된다.

BlendMode 는 말 그대로 어떠한 형식으로 색을 먹일지 설정하는 값인데 이게 또 굉장히 많아서 이 글에서 정리하기에는 무리가 조금 있다. 그래도 간단하게 알아보자.

먼저 사용한 사진의 원본은 이런 이미지다.

colorFilter: ColorFilter.mode(Colors.red, BlendMode.color), // BlendMode : color

color 로 설정해 놓으면 원본 이미지의 색조와 채도, 대상 이미지의 광도를 가져와서 색칠을 해준다.

colorFilter: ColorFilter.mode(Colors.red, BlendMode.difference), // BlendMode : difference

difference 로 설정해 주면 지정한 값에 따라 색상을 반전시켜 준다.

colorFilter: ColorFilter.mode(Colors.red, BlendMode.darken), // BlendMode : darken

이름부터 알 수 있듯이 색상 채널에서 가장 낮은 값을 선택하여 어둡게 해주는 거다.

일단 여기까지만 알아보겠다. BlenMode 를 다 알아보기엔 29개나 있어서 다 알아보기엔 확실히 무리가 있는 듯하다. 암튼 도움이 되었길 바라며 마치겠다.

 

반응형