[flutter] photo_view 패키지로 이미지 편집 기능 구현하기

Flutter Photo View

이미지 편집은 사용자가 이미지를 확대, 축소하거나 회전시킬 수 있도록 하는 기능입니다. 이번에는 Flutter의 photo_view 패키지를 사용하여 이미지 편집 기능을 구현하는 방법에 대해 알아보겠습니다.

photo_view 패키지 설치하기

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

dependencies:
  photo_view: ^0.11.1

그리고, 패키지를 설치하기 위해 터미널에서 다음 명령어를 실행합니다.

flutter packages get

이제 photo_view 패키지를 사용할 준비가 되었습니다.

photo_view로 이미지 편집 기능 구현하기

photo_view 패키지를 사용하여 이미지 편집 기능을 구현하는 방법은 매우 간단합니다. 먼저, PhotoView 위젯을 사용하여 이미지를 출력합니다.

import 'package:flutter/material.dart';
import 'package:photo_view/photo_view.dart';

class ImageViewer extends StatefulWidget {
  final String imageUrl;

  ImageViewer({required this.imageUrl});

  @override
  _ImageViewerState createState() => _ImageViewerState();
}

class _ImageViewerState extends State<ImageViewer> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Image Viewer'),
      ),
      body: Center(
        child: PhotoView(
          imageProvider: NetworkImage(widget.imageUrl),
        ),
      ),
    );
  }
}

위의 코드에서 PhotoView 위젯의 imageProvider 속성에는 이미지의 URL을 제공해야 합니다. 이제 위의 코드를 사용하여 이미지 편집 기능을 가진 화면을 구성할 수 있습니다.

이미지 확대/축소, 회전 기능 추가하기

PhotoView 위젯은 기본적으로 이미지 확대/축소와 회전을 지원합니다. 하지만, 사용자가 확대/축소 또는 회전 기능을 사용할 수 있도록 인터랙션을 추가할 수도 있습니다.

import 'package:flutter/material.dart';
import 'package:photo_view/photo_view.dart';

class ImageViewer extends StatefulWidget {
  final String imageUrl;

  ImageViewer({required this.imageUrl});

  @override
  _ImageViewerState createState() => _ImageViewerState();
}

class _ImageViewerState extends State<ImageViewer> {
  double _scale = 1.0;
  double _rotation = 0.0;

  void _onZoomChanged(double scale) {
    setState(() {
      _scale = scale;
    });
  }

  void _onRotationChanged(double rotation) {
    setState(() {
      _rotation = rotation;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Image Viewer'),
      ),
      body: Center(
        child: PhotoView(
          imageProvider: NetworkImage(widget.imageUrl),
          minScale: PhotoViewComputedScale.contained * 0.8,
          maxScale: PhotoViewComputedScale.covered * 2.0,
          initialScale: _scale,
          initialRotation: _rotation,
          scaleStateChangedCallback: _onZoomChanged,
          rotateStateChangedCallback: _onRotationChanged,
        ),
      ),
    );
  }
}

위의 코드에서 PhotoView 위젯의 minScalemaxScale 속성을 사용하여 최소 및 최대 확대/축소 비율을 지정할 수 있습니다. 변수 _scale을 사용하여 사용자가 확대/축소를 조작할 때 변경 사항을 추적합니다. _onZoomChanged 콜백 함수는 사용자가 확대/축소를 조작할 때 호출됩니다.

PhotoView 위젯의 initialRotation 속성을 사용하여 초기 회전 값을 설정할 수 있습니다. 변수 _rotation을 사용하여 사용자가 회전을 조작할 때 변경 사항을 추적합니다. _onRotationChanged 콜백 함수는 사용자가 회전을 조작할 때 호출됩니다.

이제 위의 코드를 사용하여 이미지 편집 기능이 있는 화면을 만들 수 있습니다.

결론

이번 글에서는 Flutter의 photo_view 패키지를 사용하여 이미지 편집 기능을 구현하는 방법에 대해 알아보았습니다. photo_view 패키지는 간단한 설정으로 이미지 확대/축소 및 회전 기능을 제공합니다. 이를 활용하여 사용자 친화적인 이미지 뷰어를 만들 수 있습니다.

photo_view 패키지 덕분에 Flutter 개발자는 이미지 편집 기능을 간단하게 구현할 수 있으며, 다양한 애플리케이션에 활용할 수 있습니다.

참고 자료