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