image-wire
Version:
0 dependencies, less than 1kb library to glue images together
112 lines (69 loc) • 2.63 kB
Markdown
# `image-wire`
A minimalistic, dependency free library to merge multiple images into one.
<img src=".github/demo.gif">
## Why?
The specific use case case that led to the making of this library is to be able to create a single image from many for idendity documents upload.
Say you have to upload the recto and verso of your idenditity paper but your backend only accept a single file. This is where `image-wire` comes in handy.
=> [a] + [b] = [ab]
## Installation
```bash
# npm
$ npm install image-wire
# pnpm
$ pnpm add image-wire
# yarn
$ yarn add image-wire
```
## Usage
```js
import { image-wire } from 'image-wire';
const img = document.querySelector('img');
const input = document.querySelector('input');
input.addEventListener('change', async (e) => {
const { files } = e.target;
const [src, blob] = await image-wire(files, {
direction: 'vertical',
gap: 100,
color: 'red',
});
img.src = src;
uploadImage(blob);
});
```
## API
### image-wire(sources: string[] | FileList, options?: Partial<Options>)
Returns: `Promise<[string, Blob]>`, a tuple with the newly created img url and a blob ready for upload
`image-wire` takes a list of strings (which should be a list of URLs) or a `FileList` which is what `e.target.files` returns on an input of type file.
### options
- Type: `Object`
List of options to pass as a second argument to `image-wire`
#### options.gap
- Type: `number`
- Default: 0
A number indicating the gap (in pixels) between each images.
#### options.direction
- Type: `'horizontal' | 'vertical'`
- Default: 'horizontal'
A string indicating in which direction the image are going to be glued together.
#### options.type
- Type: `string & ('image/jpeg' | 'image/png' | 'image/webp')`
- Default: 'image/png'
A string indicating the image format.
#### options.quality
- Type: `number`
- Default: 0.92
A number between **0 and 1** indicating the image quality to use for image formats that use lossy compression such as image/jpeg and image/webp.
#### options.color
- Type: `string | CanvasGradient | CanvasPattern`
A string, canvas gradient or canvas pattern used to fill the background.
There is no default.
## Contribute
- Fork the repo.
- Clone the repo. locally
- Run `pnpm install` (you might need to install [pnpm](https://pnpm.js.org/) first)
- Run `pnpm dev`
- Open `localhost:3000` and do your changes to [src/image-wire.ts](./src/index.ts)
- Commit & push
- Make a PR
## Prior work
- [merge-images](https://github.com/lukechilds/merge-images) - A library to merge and compose images on top of each other. `image-wire` is inspired by it.