Skip to content

mehmetb/tga-for-web

Repository files navigation

TGA for Web

npm version

Reads a .tga file into a JavaScript ArrayBuffer and draws it on a canvas element. Works entirely in the browser.

Live Demo

Installation

npm install tga-for-web

Usage

Read a TGA file from an input element and draw it to a canvas:

import { drawToCanvas } from 'tga-for-web';

const canvas = document.getElementById('canvas');
const fileInput = document.getElementById('fileInput');

fileInput.addEventListener('change', (event) => {
  const file = fileInput.files?.item(0);
  if (!file) return;

  const reader = new FileReader();

  reader.onload = async (event) => {
    const arrayBuffer = reader.result;
    const { duration, fileInfo } = await drawToCanvas(canvas, arrayBuffer);
    console.log(`Image drawn in ${duration} ms`);
    console.log(fileInfo);
  };

  reader.readAsArrayBuffer(file);
});

Read a TGA file from a URL and draw it to a canvas:

import { drawToCanvas } from 'tga-for-web';

const canvas = document.getElementById('canvas');
const url = 'https://example.com/image.tga';

fetch(url)
  .then((response) => response.arrayBuffer())
  .then((arrayBuffer) => drawToCanvas(canvas, arrayBuffer))
  .then(({ duration, fileInfo }) => {
    console.log(`Image drawn in ${duration} ms`);
    console.log(fileInfo);
  });

How to run the Live Demo locally?

git clone [email protected]:mehmetb/tga-for-web.git
cd tga-for-web
yarn install
yarn start

Then go to http://127.0.0.1:8000 in your browser.

Supported TGA Image Types

  • Color-mapped images
  • True-color images
  • Black and white (unmapped) images
  • Run-length encoded, color-mapped images
  • Run-length encoded, true-color images
  • Run-length encoded, black and white images

Contributing

Contributions are welcome! Please open an issue or submit a pull request.

Credits

I would like to extend my sincere thanks to @bulentv for his invaluable mentorship throughout the development of this project. His code reviews, guidance on understanding the nuances of the TGA format, and optimization suggestions have greatly improved the performance and direction of the library.

Resources

License

GNU GPLv3 - Free as ın Freedom

GNU General Public License v3.0 or later.

See COPYING for the full text.