@3846masa/bmp
Version:
Create a BMP (w/ alpha channel) binary from RGBA raw bytes like ImageData.
158 lines (108 loc) • 4.29 kB
Markdown
# @3846masa/bmp

[![npm-badge]][npm]
[![mit-license-badge]][mit-license]
Create a BMP (w/ alpha channel) binary from RGBA raw bytes like ImageData.
- faster than other libraries (e.g. bmp-js)
- tiny size (basic: ~ 500 bytes, webworker: ~ 700 bytes)
- supports alpha channel
## Table of Contents
- [Usage](#usage)
- [CDN](#cdn)
- [Using via bundler](#using-via-bundler)
- [API](#api)
- [`convert({ width, height, data })`](#convert-width-height-data-)
- [`HTMLCanvasElement.prototype.toBlob(callback, type)`](#htmlcanvaselementprototypetoblobcallback-type)
- [Contributing](#contributing)
- [License](#license)
## Usage
### CDN
#### Basic

[![codesandbox-badge]](https://codesandbox.io/s/github/3846masa/bmp/tree/main/examples/basic)
See [./examples/basic](./examples/basic).
```html
<script type="module">
import { convert } from 'https://unpkg.com/@3846masa/bmp/lib/convert.mjs';
const canvas = document.getElementById('canvas');
const bmpImg = document.getElementById('bmp');
function main() {
const ctx = canvas.getContext('2d');
const raw = ctx.getImageData(0, 0, canvas.width, canvas.height);
const bmpBinary = convert(raw);
const blob = new Blob([bmpBinary], { type: 'image/bmp' });
bmpImg.src = URL.createObjectURL(blob);
}
main();
</script>
```
#### WebWorker

[![codesandbox-badge]](https://codesandbox.io/s/github/3846masa/bmp/tree/main/examples/webworker)
See [./examples/webworker](./examples/webworker).
```html
<script type="module">
import { convert } from 'https://unpkg.com/@3846masa/bmp/lib/worker.mjs';
const canvas = document.getElementById('canvas');
const bmpImg = document.getElementById('bmp');
async function main() {
const ctx = canvas.getContext('2d');
const raw = ctx.getImageData(0, 0, canvas.width, canvas.height);
const bmpBinary = await convert(raw);
const blob = new Blob([bmpBinary], { type: 'image/bmp' });
bmpImg.src = URL.createObjectURL(blob);
}
main().catch(console.error);
</script>
```
#### No module

[![codesandbox-badge]](https://codesandbox.io/s/github/3846masa/bmp/tree/main/examples/canvas-to-blob)
See [./examples/canvas-to-blob](./examples/canvas-to-blob).
```html
<script src="https://unpkg.com/@3846masa/bmp/lib/polyfill.js"></script>
<script>
const canvas = document.getElementById('canvas');
const bmpImg = document.getElementById('bmp');
function main() {
canvas.toBlob(callback, 'image/bmp');
function callback(blob) {
bmpImg.src = URL.createObjectURL(blob);
}
}
main();
</script>
```
### Using via bundler

```sh
npm i @3846masa/bmp
```
```js
import { convert } from '@3846masa/bmp';
```
## API
### `convert({ width, height, data }, options?)`
Convert RGBA raw bytes like ImageData to a BMP binary.
In `worker.mjs`, this function returns Promise.
| | |
| :--------------- | :------------------------------------ |
| `width` | `number` |
| `height` | `number` |
| `data` | `Uint8Array` \| `Uint8ClampedArray` |
| `options.strict` | `boolean` |
| Returns | `Uint8Array` \| `Promise<Uint8Array>` |
### `HTMLCanvasElement.prototype.toBlob(callback, type)`
| | |
| :--------- | :-------------------- |
| `callback` | `(blob: Blob) => any` |
| `type` | `'image/bmp'` |
## Contributing
PRs accepted.
## License
[MIT (c) 3846masa][mit-license]
[npm-badge]: https://flat.badgen.net/npm/v/@3846masa/bmp?icon=npm
[npm]: https://www.npmjs.com/package/@3846masa/bmp
[mit-license-badge]: https://flat.badgen.net/badge/license/MIT/blue
[mit-license]: https://3846masa.mit-license.org
[codesandbox-badge]: https://flat.badgen.net/badge/codesandbox/try%20it/black