freedome_editor_comics 1.1.0
freedome_editor_comics: ^1.1.0 copied to clipboard
Flutter library for creating and editing interactive comics with animation, sound and multi-language support.
Freedome Editor Comics #
Flutter библиотека для создания и редактирования интерактивных комиксов с поддержкой анимации, звука и многоязычности.
Описание #
Freedome Editor Comics - это Flutter библиотека, портированная с C# legacy_comics_editor, которая предоставляет функциональность для создания интерактивных комиксов с поддержкой:
- Многослойная структура - создание слоев с изображениями
- Анимация - поддержка трансформаций (перемещение, поворот, масштабирование, прозрачность)
- Звуковое сопровождение - добавление аудио файлов с временными метками
- Многоязычность - поддержка нескольких языков (EN, RU, HI)
- Экспорт/Импорт - сохранение и загрузка проектов в формате .comics/.puzzle
Формат данных #
Структура Comics #
class Comics {
int width; // Ширина комикса
int height; // Высота комикса
List<Layer> layers; // Список слоев
List<Sound> sounds; // Список звуков
}
Структура Layer #
class Layer {
bool preview; // Превью режим
List<Image> images; // Изображения для разных языков
List<Animation> animations; // Анимации слоя
}
Структура Image #
class Image {
String file; // Путь к файлу изображения
String popup; // Путь к popup изображению
int width; // Ширина изображения
int height; // Высота изображения
bool isTiles; // Является ли изображение тайлами
}
Типы анимаций #
TranslateAnim (Перемещение)
class TranslateAnim extends Animation {
int x; // Смещение по X
int y; // Смещение по Y
}
RotateAnim (Поворот)
class RotateAnim extends PivotAnimation {
double angle; // Угол поворота в градусах
double pivotX; // Точка поворота X (0.0-1.0)
double pivotY; // Точка поворота Y (0.0-1.0)
}
ScaleAnim (Масштабирование)
class ScaleAnim extends PivotAnimation {
double scaleX; // Масштаб по X
double scaleY; // Масштаб по Y
double pivotX; // Точка масштабирования X (0.0-1.0)
double pivotY; // Точка масштабирования Y (0.0-1.0)
}
AlphaAnim (Прозрачность)
class AlphaAnim extends Animation {
double alpha; // Прозрачность (0.0-1.0)
}
SoundAnim (Звук)
class SoundAnim extends Animation {
// Специальная анимация для воспроизведения звука
}
Структура Sound #
class Sound {
String file; // Путь к аудио файлу
List<Animation> animations; // Анимации звука
}
Базовый класс Animation #
abstract class Animation {
int start; // Начальное время
int end; // Конечное время
AnimationType type; // Тип анимации
// Интерполяция между анимациями
Animation interpolate(Animation current, double scroll);
// Фактор интерполяции
double factor(double scroll);
}
Поддерживаемые языки #
- EN - English
- RU - Русский
- HI - Hindi
Форматы файлов #
Входные форматы #
- Изображения: JPG, PNG
- Аудио: MP3
- Проекты: .comics, .puzzle
Выходные форматы #
- Проекты: .comics (обычные комиксы), .puzzle (пазлы)
Примеры использования #
Создание нового комикса #
import 'package:freedome_editor_comics/freedome_editor_comics.dart';
// Создание нового комикса
final comics = Comics(
width: 1080,
height: 2160,
layers: [],
sounds: [],
);
// Добавление слоя
final layer = Layer.create(
imagePath: '/path/to/image.jpg',
scroll: 0.0,
isPuzzle: false,
);
comics.layers.add(layer);
// Добавление звука
final sound = Sound.create(
audioPath: '/path/to/audio.mp3',
scroll: 0.0,
);
comics.sounds.add(sound);
Работа с анимациями #
// Добавление анимации перемещения
final translateAnim = TranslateAnim(
start: 0,
end: 1000,
x: 100,
y: 50,
);
layer.animations.add(translateAnim);
// Добавление анимации поворота
final rotateAnim = RotateAnim(
start: 500,
end: 1500,
angle: 45.0,
pivotX: 0.5,
pivotY: 0.5,
);
layer.animations.add(rotateAnim);
Сохранение и загрузка #
// Сохранение комикса
await comics.save('/path/to/comics.comics');
// Загрузка комикса
final loadedComics = await Comics.load('/path/to/comics.comics');
Воспроизведение анимации #
// Получение текущего состояния анимации
final currentState = layer.getAnimationState(scroll: 500.0);
// Применение трансформаций
canvas.translate(currentState.translateX, currentState.translateY);
canvas.rotate(currentState.rotation);
canvas.scale(currentState.scaleX, currentState.scaleY);
canvas.setAlpha(currentState.alpha);
Архитектура #
Библиотека построена на основе MVVM паттерна:
- Models - Модели данных (Comics, Layer, Image, Sound, Animation)
- ViewModels - Логика представления (ComicsViewModel, LayerViewModel)
- Utils - Утилиты (FileManager, ZipUtils, ImageMagick)
Зависимости #
path_provider- для работы с файловой системойarchive- для работы с ZIP архивамиimage- для обработки изображенийaudioplayers- для воспроизведения звука
Установка #
dependencies:
freedome_editor_comics: ^1.0.0
Лицензия #
MIT License
Поддержка #
Для вопросов и предложений создавайте issues в репозитории проекта.