Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Это не APNG фиксер - это APNG хакер! (https://javascript.ru/forum/project/20945-ehto-ne-apng-fikser-ehto-apng-khaker.html)

Solovei95 23.08.2011 15:28

Удалено (больше нету)
 
Я удалил тему!

Octane 23.08.2011 15:42

А зачем оно нужно если можно работать с png спрайтом? Фотошоп не умеет в APNG сохранять, без JavaScript не работает, в чем плюсы тогда, кому нужен этот формат?

Solovei95 23.08.2011 16:18

Вы можете использовать движок для отображении анимации!
https://github.com/Solovei95/apngjng.../imagetools.js
var anim = new Animation();
anim.offsetX = 0;
anim.offsetY = 0;
anim.blend_op = 0;
anim.dispose_op = 0;
anim.delay = 1000;
anim.addFrame(element1);
anim.addFrame(element2);
anim.addFrame(element3);
anim.animate();

Octane 23.08.2011 20:04

Цитата:

Сообщение от Solovei95
anim.addFrame(element1);
anim.addFrame(element2);
anim.addFrame(element3);

Это разные изображения? А со спрайтами как быть?

Ну и все таки зачем столько усилий для APNG?

devote 23.08.2011 20:23

Цитата:

Сообщение от Octane
Ну и все таки зачем столько усилий для APNG?

Видимо человеку от безделья заняться нечем =)

Solovei95 24.08.2011 06:30

Для спрайтов есть парсер!
https://github.com/Solovei95/apngjng.../imagetools.js

var big = new Image();
big.src = "image.jpg";
big.onload = function(){
var imgs = parseSprite(big,{
row:2,
cell:2,
width:100,
height:100,
sizeMode:0,
paddingLeft:0,
paddingTop:0
});
}

Режем:
Таблица 2х2, размер кусков 100х100, сдвиг таблицы 0х0

Так что тупо:
ctx.drawImage(imgs[0],0,0);
ctx.drawImage(imgs[1],100,0);
ctx.drawImage(imgs[2],0,100);
ctx.drawImage(imgs[3],100,100);

Все куски являются Canvas элементами, но их можно рисовать в drawImage.

Если сделать sizeMode:1 то размер кусков будет зависить от размера самой таблицы
Если sizeMode:0 то размер таблицы зависит от размера кусков

Solovei95 24.08.2011 06:31

Так что пинаем!
Есть также функция для маски и конверта картинки:
imageMask(canvas,img_elem1,img_elem2);
convertImage(canvas,img_elem1);

Solovei95 24.08.2011 06:41

По аналогии:

var big = new Image();
big.src = "image.jpg";
big.onload = function(){
var imgs = parseSprite(big,{
row:2,
cell:2,
width:100,
height:100,
sizeMode:0,
paddingLeft:0,
paddingTop:0
});

var anim = new Animation();
...
anim.addFrame(imgs[0]);
anim.addFrame(imgs[1]);
anim.addFrame(imgs[2]);
anim.addFrame(imgs[3]);
anim.animate();
}

Solovei95 24.08.2011 06:43

"Норвежские биотлонисты"

Solovei95 24.08.2011 10:59

Я вам расскажу один секрет!
Canvas это тот же IMG элемент. Только IMG имеет картинку с определенного URL аддреса, и ее нужно подгружать!
Canvas же напротив - его можно использовать без URL аддреса, не нужно подгружать!

Solovei95 24.08.2011 11:00

background-image использует URL аддрес, и не возможно использовать там Canvas элемент.

Solovei95 24.08.2011 11:01

Для IMG нужно использовать свойство onload (и по возможности onerror).
Для Canvas не нужно использовать ни onload, ни onerror (тем более что их нету).

Solovei95 24.08.2011 11:02

http://www.w3.org/TR/2dcontext/#images
Прошу почитать!
Там вы увидите:
Цитата:

Each of those three can take either an HTMLImageElement, an HTMLCanvasElement, or an HTMLVideoElement for the image argument.

Kolyaj 24.08.2011 11:32

Цитата:

Сообщение от Solovei95
Я вам расскажу один секрет!

Нам интересен другой секрет.
Цитата:

Сообщение от Octane
Фотошоп не умеет в APNG сохранять, без JavaScript не работает, в чем плюсы тогда, кому нужен этот формат?


Solovei95 24.08.2011 12:07

Фотошоп не умеет сохранять JNG.

Octane 24.08.2011 12:10

Первое правило темы об APNG: не говорить об APNG :D

Kolyaj 24.08.2011 12:23

А причём здесь JNG?

Solovei95 24.08.2011 13:37

JNG тоже здесь причем!
Я создал:
crossImage - создает элемент с APNG/JNG или других изображений как Canvas элемент.

Пример:

//JNG
var img = new CrossImage("image.jng",function(){
ctx.drawImage(img,0,0);
});
//APNG/PNG
var img2 = new CrossImage("image.png",function(){
ctx2.drawImage(img2,0,0);
});
//JPEG
var img3 = new CrossImage("image.jpg",function(){
ctx3.drawImage(img3,0,0);
});


JNG = JPEG Network Graphics
http://en.wikipedia.org/wiki/JNG

APNG = Animated PNG
http://en.wikipedia.org/wiki/APNG
(чтобы анимация работала, если вы используете crossimage, следует использовать setInverval)

Solovei95 24.08.2011 13:43

Для CrossImage доступны следующие форматы:
APNG
PNG (статичный)
GIF (не анимированный)
JNG
JPG
И прочие поддерживаемые.

Kolyaj 24.08.2011 13:58

Цитата:

Сообщение от Solovei95
crossImage - создает элемент с APNG/JNG или других изображений как Canvas элемент.

Прекрасно. И кому нужны эти форматы, если даже фотошоп их не поддерживает?

Solovei95 24.08.2011 14:15

Я переписал код crossImage.
Теперь работает совсем подругому:

crossImage("clock.png",{
canvas:document.getElementById("canvas"),
onload:function(){
//On loaded Image
},
onrender:function(){
//on APNG render
},
onplay:function(){
//On Start APNG Animation
}
});

onrender и onplay сделан для APNG
остальные идут к любым картинкам.

Solovei95 24.08.2011 14:21

Заменил onplay на onstart
Добавил onerror.

Теперь стало кроссоскриптово!


Часовой пояс GMT +3, время: 21:32.