-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy path2index.html
More file actions
122 lines (94 loc) · 3.75 KB
/
2index.html
File metadata and controls
122 lines (94 loc) · 3.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
<style>
body {
animation: a 2s linear infinite;
}
</style>
<script src="gifuct-js.js"></script>
<script>
var divider = 10;
var scale = .5;
var frames;
var f = 0;
var canvas;
var context;
var tempCanvas;
var tempContext;
var keyframes = [];
function render() {
var frame = frames[f];
var dims = frame.dims;
if (!canvas) {
canvas = document.createElement('canvas');
context = canvas.getContext('2d');
canvas.width = dims.width;
canvas.height = dims.height;
tempCanvas = document.createElement('canvas');
tempContext = tempCanvas.getContext('2d');
tempCanvas.width = dims.width;
tempCanvas.height = dims.height;
}
var imageData = tempContext.createImageData(dims.width, dims.height);
imageData.data.set(frame.patch);
tempContext.putImageData(imageData, 0, 0);
context.drawImage(tempCanvas, dims.left, dims.top);
}
function convert() {
var imageData = context.getImageData(0, 0, canvas.width, canvas.height);
var backGradients = [];
var frontGradients = [];
for (let y = 0; y < canvas.height-(divider/2); y += divider) {
for (let x = 0; x < canvas.width-(divider/2); x += divider) {
let xx = x;
let yy = y;
let i = ((yy * canvas.width) + xx) * 4;
let r = ('00'+imageData.data[i+0].toString(16)).slice(-2);
let g = ('00'+imageData.data[i+1].toString(16)).slice(-2);
let b = ('00'+imageData.data[i+2].toString(16)).slice(-2);
let rgb = `#${r}${g}${b}`;
//let gradient = `radial-gradient(circle at ${xx}px ${yy}px,${rgb},${rgb} ${divider/2}px,transparent ${divider/2}px)`;
let gradient = `radial-gradient(circle at ${xx*scale}px ${yy*scale}px,${rgb},${rgb} ${(divider/2)*scale}px,transparent ${(divider/2)*scale}px)`;
backGradients.push(gradient);
/*xx += divider/2;
yy += divider/2;
i = ((Math.floor(yy) * canvas.width) + Math.floor(xx)) * 4;
r = imageData.data[i+0];
g = imageData.data[i+1];
b = imageData.data[i+2];
rgb = `rgb(${r},${g},${b})`;
gradient = `radial-gradient(circle at ${xx}px ${yy}px,${rgb},${rgb} ${divider/2}px,transparent ${divider/2}px)`;
frontGradients.push(gradient);*/
}
}
let percent = Math.floor((f/(frames.length-1))*100);
console.log(percent);
//let frameCss = percent+'%{background:'+backGradients.join(',')+','+frontGradients.join(',')+'}';
let frameCss = percent+'%{background:'+backGradients.join(',')+'}';
keyframes.push(frameCss);
}
function transcode() {
frames.forEach((frame, ff) => {
f = ff;
render();
convert();
});
let css = '@keyframes a {' + keyframes.join('\n') + '}';
console.log(css.length / 1024 / 1024);
const style = document.createElement('style');
style.innerHTML = css;
document.head.appendChild(style);
}
window.addEventListener('load', () => {
var oReq = new XMLHttpRequest();
oReq.open('GET', 'spongebob.gif', true);
oReq.responseType = "arraybuffer";
oReq.onload = function (oEvent) {
var arrayBuffer = oReq.response; // Note: not oReq.responseText
if (arrayBuffer) {
gif = new GIF(arrayBuffer);
frames = gif.decompressFrames(true);
transcode();
}
};
oReq.send(null);
});
</script>