You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
93 lines
1.9 KiB
93 lines
1.9 KiB
2 months ago
|
# js-wmf
|
||
|
|
||
|
Processor for Windows MetaFile (WMF) files in JS (for the browser and nodejs).
|
||
|
|
||
|
|
||
|
## Installation
|
||
|
|
||
|
With [npm](https://www.npmjs.org/package/wmf):
|
||
|
|
||
|
```bash
|
||
|
$ npm install wmf
|
||
|
```
|
||
|
|
||
|
In the browser:
|
||
|
|
||
|
```html
|
||
|
<script src="wmf.js"></script>
|
||
|
```
|
||
|
|
||
|
The browser exposes a variable `WMF`.
|
||
|
|
||
|
|
||
|
## Usage
|
||
|
|
||
|
The `data` argument is expected to be an `ArrayBuffer`, `Uint8Array` or `Buffer`
|
||
|
|
||
|
- `WMF.image_size(data)` extracts the image offset and extents, returns an Array
|
||
|
`[width, height]` where both metrics are measured in pixels.
|
||
|
|
||
|
- `WMF.draw_canvas(data, canvas)` parses the WMF and draws to a `Canvas`.
|
||
|
|
||
|
### Notes
|
||
|
|
||
|
- The library assumes the global `ImageData` is available. For nodejs-powered
|
||
|
canvas implementations, a shim must be exposed as a global. Using the `canvas`
|
||
|
npm package:
|
||
|
|
||
|
```js
|
||
|
const { createImageData } = require("canvas");
|
||
|
global.ImageData = createImageData;
|
||
|
```
|
||
|
|
||
|
- `OffscreenCanvas` in Chrome and some other Canvas implementations require
|
||
|
the dimensions in the constructor:
|
||
|
|
||
|
```js
|
||
|
const size = WMF.image_size(data);
|
||
|
const canvas = new OffscreenCanvas(size[0], size[1]);
|
||
|
```
|
||
|
|
||
|
|
||
|
## Examples
|
||
|
|
||
|
<details>
|
||
|
<summary><b>Browser Fetch into canvas</b> (click to show)</summary>
|
||
|
|
||
|
```js
|
||
|
// assume `canvas` is a DOM element
|
||
|
(async() => {
|
||
|
const res = await fetch("url/for/image.wmf");
|
||
|
const ab = await res.arrayBuffer();
|
||
|
WMF.draw_canvas(ab, document.getElementById("canvas"));
|
||
|
})();
|
||
|
```
|
||
|
|
||
|
</details>
|
||
|
|
||
|
<details>
|
||
|
<summary><b>NodeJS (using `canvas` npm module)</b> (click to show)</summary>
|
||
|
|
||
|
```js
|
||
|
const { createCanvas, createImageData } = require("canvas");
|
||
|
global.ImageData = createImageData;
|
||
|
|
||
|
const size = WMF.image_size(data);
|
||
|
const canvas = createCanvas(size[0], size[1]);
|
||
|
WMF.draw_canvas(data, canvas);
|
||
|
```
|
||
|
|
||
|
</details>
|
||
|
|
||
|
|
||
|
## License
|
||
|
|
||
|
Please consult the attached LICENSE file for details. All rights not explicitly
|
||
|
granted by the Apache 2.0 License are reserved by the Original Author.
|
||
|
|
||
|
|
||
|
## References
|
||
|
|
||
|
- `MS-WMF`: Windows Metafile Format
|
||
|
|