Как стать автором
Обновить

Морфинг изображений в браузере

image
Морфинг (англ. morphing, трансформация) — технология в компьютерной анимации, визуальный эффект, создающий впечатление плавной трансформации одного объекта в другой.
Morphjs(beta) — js библиотека для морфинга изображений.



Что внутри


vi.Tween

Класс для изменения одного или несколько числовых свойств любого объекта с течением времени (обновления происходят на каждом кадре).
Статичные публичные методы:

  • to — добавляет объект в список обновляемых объектов.
    Пример:
    vi.Tween.to(obj/*объект для твиннинга*/, 
    			.5/*время в секундах за которое произойдёт изменение параметров*/, 
    			{ alpha: 1 }/*изменяемые параметры*/);
    

    В объекте изменяемых параметров возможны специальные свойства, добавляющие дополнительный функционал:
    • delay — пауза перед началом трансформации.
    • onStart — функция выполняемая перед началом трансформации.
    • onStartParams — параметры передаваемые в onStart.
    • onComplete — функция выполняемая по завершении трансформации.
    • onCompleteParams — параметры передаваемые в onComplete.
    • onUpdate — функция выполняемая при каждом обновлении трансформации.
    • onUpdateParams — параметры передаваемые в onUpdate.
    • ease — уравнение движения (http://robertpenner.com/easing/).
    • killTween — останавливает трансформацию объекта без последующей возможности возобновить.
    • pauseTween — ставит трансформацию объекта на паузу.
    • resumeTween — снимает трансформацию объекта с паузы.

    Возможно последовательное выполнение трансформаций (только метод to)
    Пример:
    vi.Tween.to(obj, .5, { alpha: 1, onUpdate:function(){} })
    		.to(obj, .4, { alpha: 0 })
    		.to(obj, 1, { x: 10, y:20, delay:.5, onStart:function(){} })
    		.to(obj2, .2, { z: 30 });
    

    Твинер на объект добавляется даже если он уже находится в стадии трансформации.
    ИМХО. мне показалось это удобнее чем если бы новый твинер затирал старый.

    vi.Update

    Класс для хранения функции, вызываемых на каждом кадре, в одном месте.
    Статичные публичные методы:

    • addUpdateFunc — добавляет функцию для выполнения её в каждом кадре.
    • delUpdateFunc — удаляет функцию из списка выполняемых на каждом кадре.
    • setFps — ставит fps для кадра. По умолчанию — 60.
    • getFps — возвращает fps.
    • getCurrentTime — возвращает время с предыдущего кадра.


    vi.ImgCache

    Класс для кеширования Image oбъектов.
    Статичные публичные методы:

    • load — прогружат и кеширует изображения.
    • getImg — возвращает объект Image по url.
    • getPattern — возвращает CanvasPattern.
    • addImgFromBase64 — добавляет в кеш изображение из строки (Base64).

    пример:
    vi.ImgCache.load("imgs/01.jpg"/*string url изображения или массив с url [url,url...url]*/, onComplete/*вызывается по завершению загрузки*/)
    function onComplete(){var img = vi.ImgCache.getImg("imgs/01.jpg");}
    


    vi.Graphics

    Конструктор для отрисовки в Canvas.
    Методы:

    • beginImageFill — назначает CanvasPattern в качестве текстуры.
    • drawTriangles — рисует множество треугольников с CanvasPattern текстурой.
    • drawTexturedTriangle — рисует текстурированный треугольник. В качестве текстуры могут быть Image или CanvasPattern. Второй вариант быстрее.


    vi.Delaunay

    Класс для триангуляции множества точек методом Делоне.
    Статичные публичные методы:

    • triangulate — возвращает массив треугольников.


    vi.Morphing

    Конструктор для запуска морфинга изображений. Принимает в качестве аргументов Canvas объект и параметры анимации морфинга.
    Параметры анимации лучше создать с помощью утилиты (utility.html).
    Пример работы утилиты:


    Методы:

    • pause — ставит на паузу.
    • resume — снимает с паузы.
    • play — запускает морфинг (при создании экземпляра Morphing). Возобновляет после stop.
    • stop — останавливает морфинг. Если pause как бы замораживает анимацию то stop переводит анимацию в следующее стабильное состояние и останавливает.
    • remove — замораживает изображение и удаляет анимацию.



    Как работает


    Пример (более подробный — example.html):
    /*index.html <canvas id="canvas" width="300" height="300"></canvas>*/
    var canvas  = document.getElementById("canvas"), // получаю canvas
        params = { // параметры анимации
            "w":300, // ширина изображения
    		"h":300, // высота изображения
    		"flexible":true, // будет ли растягиваться изображение по размеру Canvas или будет по центру сохраняя w, h
    		"loop":true, // зацикленность анимации
    		"yoyo":true, // если true то при достижении конца анимация запускается к началу 
    		"images":["img/01.jpg", "img/02.jpg"], // изображения
    		"vertices":[ // массивы точек
    			[ [ 0, 0 ],[ 150, 0 ],[ 300, 0 ],[ 0, 150 ],[ 300, 150 ],[ 0, 300 ],[ 150, 300 ],[ 300, 300 ],[ 117, 118 ],[ 191, 117 ],[ 154, 167 ],[ 154, 231 ],[ 109, 228 ],[ 201, 230 ],[ 155, 77 ],[ 156, 274 ] ],
    			[ [ 0, 0 ],[ 150, 0 ],[ 300, 0 ],[ 0, 150 ],[ 300, 150 ],[ 0, 300 ],[ 150, 300 ],[ 300, 300 ],[ 105, 122 ],[ 201, 118 ],[ 149, 186 ],[ 154, 231 ],[ 109, 228 ],[ 197, 223 ],[ 149, 96 ],[ 150, 283 ] ]
    		],
    		"states":[ //состояния [images[num], vertices[num]]
    			[ 0, 0 ],
    			[ 1, 1 ]
    		],
    		"animation":[[ 0, 0, 1 ],[ 0, 1, 2 ],[ 1, 1, 1 ]]   //анимация[ start state[num], end state[num], duration ]
        };
    
    var m = new vi.Morphing(canvas, params);// Создаю экземпляр vi.Morphing, который будет отрисовываться в canvas 
    vi.Update.setFps(30);// fps вместо 60 ставлю 30
    
    //чтобы удалить анимацию 
    m.remove();
    m = null;
    


    ссылка на github:
    https://github.com/vissargo/Morphjs
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.