[flutter] photo_view 패키지로 이미지 그레이스케일 처리하기

이미지에 그레이스케일 효과를 적용하고 싶을 때, Flutter의 photo_view 패키지를 사용할 수 있습니다. photo_view 패키지는 이미지를 확대 및 축소할 수 있는 기능을 제공하며, 이를 활용하여 이미지의 그레이스케일 효과를 적용할 수 있습니다.

photo_view 패키지 설치하기

먼저, pubspec.yaml 파일에 photo_view 패키지를 추가해야 합니다. 아래와 같이 dependencies 섹션에 photo_view 패키지를 추가합니다.

dependencies:
  flutter:
    sdk: flutter
  photo_view: ^0.12.0

별도의 패키지 설치가 필요하지 않으며, 패키지를 추가한 후, flutter packages get 명령어를 실행하여 패키지를 다운로드 및 설치합니다.

이미지에 그레이스케일 효과 적용하기

photo_view 패키지를 사용하여 이미지에 그레이스케일 효과를 적용하려면 PhotoView 위젯을 사용해야 합니다. 먼저, 이미지를 포함하는 ImageProvider를 생성합니다.

ImageProvider imageProvider = AssetImage('assets/images/image.jpg');

이제 ImageProviderPhotoView 위젯의 imageProvider 속성에 할당합니다.

PhotoView(
  imageProvider: imageProvider,
)

위와 같이 코드를 작성하면 이미지를 화면에 표시할 수 있습니다. 그러나 이 상태로는 기본 이미지가 표시되므로, 그레이스케일 효과를 적용하기 위해 ImageFilter를 사용해야 합니다.

import 'dart:ui';

PhotoView(
  imageProvider: imageProvider,
  backgroundDecoration: BoxDecoration(
    color: Colors.grey,
  ),
  customChild: Container(
    foregroundDecoration: BoxDecoration(
      backgroundBlendMode: BlendMode.saturation,
      color: Colors.grey,
    ),
    child: BackdropFilter(
      filter: ImageFilter.matrix(<double>[
        0.2126, 0.7152, 0.0722, 0, 0,
        0.2126, 0.7152, 0.0722, 0, 0,
        0.2126, 0.7152, 0.0722, 0, 0,
        0,      0,      0,      1, 0,
      ]),
      child: Container(
        color: Colors.transparent,
      ),
    ),
  ),
)

customChild 속성을 사용하여 이미지 위에 새로운 위젯을 추가하고, 그 위젯에 foregroundDecoration을 설정하여 효과를 적용합니다. BackdropFilter를 사용하여 이미지에 ImageFilter를 적용하며, 여기에서는 그레이스케일 효과를 위한 ImageFilter.matrix를 사용하였습니다.

그렇게 하면 이미지에 그레이스케일 효과가 적용됩니다.

결론

photo_view 패키지를 사용하면 Flutter 애플리케이션에서 이미지를 확대, 축소 및 그레이스케일 처리할 수 있습니다. 이를 활용하여 더 다양한 이미지 효과를 구현할 수 있습니다.

참고 자료