Package Exports
- seamless-texture-generator
- seamless-texture-generator/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (seamless-texture-generator) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
tgen.js
Seamless texture generator in Javascript
The generator in action
https://texture-generator.com/generator/demo
Examples
Requirements
- running in browser -> Google Chrome, Firefox, Edge (maybe IE 10+, not tested)
- running under CLI -> node.js example
Quick usage and examples
// initialize the generator
var generator = tgen.init(256, 256);
// --- texture 1 --------------------------------------------------------------
var canvas1 = generator
.do('waves')
.toCanvas();
// set img src, and width height
$('#img1').attr('src', canvas1.toDataURL("image/png")).css({width: canvas1.width, height: canvas1.height});
// --- texture 2 --------------------------------------------------------------
var canvas2 = generator
.do('fill')
.do('waves', {blend: 'difference'})
.do('waves', {blend: 'difference'})
.do('contrast', {"adjust": 50})
.toCanvas();
// set img src, and width height
$('#img2').attr('src', canvas2.toDataURL("image/png")).css({width: canvas2.width, height: canvas2.height});
// --- texture 3 --------------------------------------------------------------
var texture3 = generator
.clear() // remove previous layers
.do('fill')
.do('clouds', {blend: 'difference'})
.do('spheres', {blend: 'lineardodge', 'dynamic': true})
.do('vibrance', {"adjust": 50});
var canvas3 = texture3.toCanvas();
// set img src, and width height
$('#img3').attr('src', canvas3.toDataURL("image/png")).css({width: canvas3.width, height: canvas3.height});
// --- texture 4 --------------------------------------------------------------
// get the generated params of texture3
var params = texture3.params();
// get number of layers
var layers = params.items.length;
// change the color of clouds
params.items[layers - 3][2].rgba = [255, 50, 10, 0.85];
// change the blending method
params.items[layers - 2][2].blend = 'overlay';
// generate new texture with modified params of texture3
var canvas4 = generator.render(params).toCanvas();
// set img src, and width height
$('#img4').attr('src', canvas4.toDataURL("image/png")).css({width: canvas4.width, height: canvas4.height});
// --- texture 5 --------------------------------------------------------------
var params = {
"width": 256, // texture width in pixel
"height": 256, // texture height in pixel
"debug": true, // render info to console log, default value: false
"items": [
[0, "lines2", { // layer number and effect name
"blend": "opacity", // layer blend mode
"count": 21, // square count
"size": [5, 15], // random size between 5-15%
"rgba": [
255, // fixed red channel
[128, 192], // random green channel between 128 and 192
[200, 255], // random blue channel between 200 and 255
[0.2, 0.6] // random opacity between 0.2 and 0.6
]
}],
[1, "spheres", { // second layer
"blend": "lighten",
"origin": "random",
"dynamic": true, //
"count": 21,
"size": [20, 100],
"rgba": [200, 200, 200, 0.7]
}],
[2, "copy", 0], // copy layer 0 to layer 1
[2, "merge", { // merge layer 1 in to 2
"layer": 1,
"blend": "lighten"
}],
[2, "brightness", {"adjust": -10, "legacy": true}], // set brightness
[2, "vibrance", {"adjust": 50}], // set vibrance
[2, "contrast", {"adjust": 50}] // set contrast
]
};
// generate
var canvas5 = generator.render(params).toCanvas();
// set img src, and width height
$('#img5').attr('src', canvas5.toDataURL("image/png")).css({width: canvas5.width, height: canvas5.height});
// --- texture 6 --------------------------------------------------------------
// change layer of texture 5 merge blend method
params.items[3] = [2, "merge", {
"layer": 1,
"blend": "difference"
}];
// render and add new effects
var canvas6 = generator
.render(params)
.do('sharpen')
.do('noise')
.toCanvas();
// set img src, and width height
$('#img6').attr('src', canvas6.toDataURL("image/png")).css({width: canvas6.width, height: canvas6.height});
// --- available effects -------------------------------------------------------
// dump all effects and default config parameters
for (key in tgen.defaults) {
var params = tgen.defaults[key];
var item = $('<span><h2>' + key + '</h2>' + JSON.stringify(params) + '</span>');
$('.defaults').append(item);
}
Available blends demo here
Available effects demo here
Available filters demo here
Available color normalize demo here
Available other options
- map (cool effect)
- merge (copy layer with blend)
- copy (copy layer without blend)
- rotate (by angle, by times, by blend)
Available events while rendering
texture.render(params, function(event, data){
console.log(event, data);
});
- beforeRender
- afterRender
- beforeEffect
- afterEffect
License
MIT
Thank you and greetings to
- BoyC/Conspiracy - a.D.D.i.c.t 2
- mrdoob - texgen.js
- Ace - The High Performance Code Editor
Build
- Node.js 12 recommended
npm install
npm run dev
for development releasenpm run prod
for production release
Todo
- fix rotate type 2 (blank pixels)
- alphamap
- plasma
- fractals, mandelbrot (WIP)
- more shapes
- sprites
- electricity
- image import
- tgen().target('#mycanvas').params({})
- copy from outer canvas
- more examples
- fix colorbar mirror : false (black image)
- cubemap-toastmap-generator
- https://github.com/jaxry/panorama-to-cubemap
- https://www.patreon.com/posts/36130209