Giter Site home page Giter Site logo

node-3d / image-raub Goto Github PK

View Code? Open in Web Editor NEW
6.0 2.0 5.0 8.35 MB

Native Image loader for Node.js

Home Page: https://github.com/node-3d/node-3d

License: MIT License

C++ 32.15% JavaScript 67.85%
node-addon image freeimage decoder graphics native addon napi n-api node-3d

image-raub's Introduction

Image for Node.js

This is a part of Node3D project.

NPM ESLint Test Cpplint

npm i -s image-raub

Node.js N-API addon implementing the HTMLImageElement. It is useful for other Node.js addons that operate on decoded images.

Note: this addon uses N-API, and therefore is ABI-compatible across different Node.js versions. Addon binaries are precompiled and there is no compilation step during the npm i command.

Load images from:

  • Local file.
  • Data URI.
  • Http(s) URL.
  • Node.js Blob URL.
  • Raw RGBA pixel data

FreeImage is used as back-end.

Additional features:

  • save - saves the image to a local file.
  • drawImage - is similar to drawImage.

Image

const Image = require('image-raub');

See TypeScript defenitions for more details.

Set window icon

Compatible with glfw-raub window.icon property.

const icon = new Image();
icon.src = __dirname + '/icons/logo.png';
icon.on('load', () => { window.icon = icon; });

Load an OpenGL texture

Here Image is used to load a texture. The constructed object receives src property, then the file is read and 'load' event is emitted. After that, image.data is available as a Buffer, containing the whole pixel data, and image.width/image.height contain the dimensions.

const Image = require('image-raub');
const image = new Image();
// Web-style onload
image.onload = () => {
	gl.bindTexture(gl.TEXTURE_2D, texture);
	gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);
	gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
	gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_NEAREST);
	gl.generateMipmap(gl.TEXTURE_2D);
	gl.bindTexture(gl.TEXTURE_2D, null);
};

image.src = `${__dirname}/texture.jpg`;

Make an OpenGL snapshot

Image can save its current content to the filesystem. It can also load from raw pixel values using static fromPixels() method.

const memSize = screen.w * screen.h * 4; // estimated number of bytes
const storage = { data: Buffer.allocUnsafeSlow(memSize) };

gl.readPixels(
	0, 0,
	screen.w, screen.h,
	gl.RGBA,
	gl.UNSIGNED_BYTE,
	storage
);

const img = Image.fromPixels(screen.w, screen.h, 32, storage.data);

img.save(`${Date.now()}.jpg`);

image-raub's People

Contributors

raub avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

image-raub's Issues

Missing dependencies on Linux

return process.dlopen(module, path._makeLong(filename));
                 ^
Error: libjpeg.so.8: cannot open shared object file: No such file or directory

cannot dlopen libjasper.so

When installing 3d-core-raub and using the example from the README I get the following error:

internal/modules/cjs/loader.js:800
  return process.dlopen(module, path.toNamespacedPath(filename));
                 ^
Error: libjasper.so.1: cannot open shared object file: No such file or directory
    at Object.Module._extensions..node (internal/modules/cjs/loader.js:800:18)
    at Module.load (internal/modules/cjs/loader.js:628:32)
    at Function.Module._load (internal/modules/cjs/loader.js:555:12)
    at Module.require (internal/modules/cjs/loader.js:666:19)
    at require (internal/modules/cjs/helpers.js:16:16)
    at Object.<anonymous>(*******/node_modules/image-raub/core.js:10:14)
    at Module._compile (internal/modules/cjs/loader.js:759:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:770:10)
    at Module.load (internal/modules/cjs/loader.js:628:32)
    at Function.Module._load (internal/modules/cjs/loader.js:555:12)

Any idea on this? Do I have install some local dep? I assumed all are included in a dependency.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.