🎨

image_editor_plusを使ってみた

2024/04/17に公開

📕Overview

https://pub.dev/packages/image_editor_plus/example

ペイント、テキスト、フィルター、絵文字、ストーリーなどのステッカーを使用した画像編集をシンプルかつ簡単にサポートする画像エディター プラグイン。

こちらにでも動画あります。OverFlow出てますが笑
https://youtu.be/Gytg7JQVj5Y

iOSであれば、info.plistに設定が必要です。

<key>NSPhotoLibraryUsageDescription</key>
<string>Used to demonstrate image picker plugin</string>
<key>NSCameraUsageDescription</key>
<string>Used to demonstrate image picker plugin</string>
<key>NSMicrophoneUsageDescription</key>
<string>Used to capture audio for image picker plugin</string>

Androidは設定は不要です。

プロジェクト内に、assetsディレクトリを作成して、画像を配置してください。その後に、pubspec.yamlを設定してください。

androidは、minSdkVersionは、21にしないとエラー出るので指定しておいてください。

🧷summary

公式のサンプルコードを画像と同じ名前に修正して使うだけです。今回は、Androidのみで、実験してます。アプリがビルドされると、initStateで、ページが呼ばれたときに、画像が表示されて下のボタンを押すと、画像を回転したり、色付きの線を引いてお絵描きができるようになります。面白いですね。

main.dart
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:image_editor_plus/image_editor_plus.dart';

void main() {
  runApp(
    const MaterialApp(
      home: ImageEditorExample(),
    ),
  );
}

class ImageEditorExample extends StatefulWidget {
  const ImageEditorExample({
    super.key,
  });

  
  createState() => _ImageEditorExampleState();
}

class _ImageEditorExampleState extends State<ImageEditorExample> {
  Uint8List? imageData;

  
  void initState() {
    super.initState();
    loadAsset("shot.jpg");
  }

  void loadAsset(String name) async {
    var data = await rootBundle.load('assets/$name');
    setState(() => imageData = data.buffer.asUint8List());
  }

  
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("ImageEditor Example"),
        centerTitle: true,
      ),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          if (imageData != null) Image.memory(imageData!),
          const SizedBox(height: 16),
          ElevatedButton(
            child: const Text("Single image editor"),
            onPressed: () async {
              var editedImage = await Navigator.push(
                context,
                MaterialPageRoute(
                  builder: (context) => ImageEditor(
                    image: imageData,
                  ),
                ),
              );

              // replace with edited image
              if (editedImage != null) {
                imageData = editedImage;
                setState(() {});
              }
            },
          ),
          ElevatedButton(
            child: const Text("Multiple image editor"),
            onPressed: () async {
              var editedImage = await Navigator.push(
                context,
                MaterialPageRoute(
                  builder: (context) => ImageEditor(
                    images: [
                      imageData,
                      imageData,
                    ],
                  ),
                ),
              );

              // replace with edited image
              if (editedImage != null) {
                imageData = editedImage;
                setState(() {});
              }
            },
          ),
        ],
      ),
    );
  }
}

🧑‍🎓thoughts

今回は、カメラアプリで時々使うような画像を加工するライブラリを使ってみました。ご興味がある人は試してみてください。撮影した画像を取り込んで加工した方が面白そうですけどね笑

Discussion