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
			| 
								 
											3 years 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
							 | 
						||
| 
								 | 
							
								
							 |