{"_id":"@nsfw-filter/gif-frames","_rev":"2-e975e0b4616ce1f6301f86911d2e8aa6","name":"@nsfw-filter/gif-frames","dist-tags":{"latest":"1.0.2"},"versions":{"1.0.1":{"name":"@nsfw-filter/gif-frames","version":"1.0.1","description":"Pure JavaScript tool for extracting GIF frames and saving to file","main":"gif-frames.js","types":"gif-frames.d.ts","bundled":"dist/gif-frames.js","bundled-min":"dist/gif-frames.min.js","scripts":{"build:clean":"rimraf dist && mkdirp dist","build:umd":"browserify gif-frames.js -o dist/gif-frames.js -s gifFrames","build:uglify":"uglifyjs dist/gif-frames.js -o dist/gif-frames.min.js","build":"npm run build:clean && npm run build:umd && npm run build:uglify","dev":"mkdirp dist && watchify gif-frames.js -o dist/gif-frames.js -s gifFrames","prepublish":"npm run build","test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/nsfw-filter/gif-frames.git"},"keywords":["gif","frames","extract","save","images","javascript","pure-js"],"author":{"name":"Ben Wiley"},"license":"MIT","bugs":{"url":"https://github.com/nsfw-filter/gif-frames/issues"},"homepage":"https://github.com/nsfw-filter/gif-frames#readme","dependencies":{"@nsfw-filter/save-pixels":"^2.3.4","get-pixels-frame-info-update":"3.3.2","multi-integer-range":"3.0.0"},"devDependencies":{"browserify":"16.2.3","mkdirp":"0.5.1","rimraf":"2.6.1","uglify-js":"3.0.20","watchify":"3.11.0"},"gitHead":"c343970df0d8df1c7dfcd40f03f91ff2edb64048","_id":"@nsfw-filter/gif-frames@1.0.1","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-T9B383X8k7AcKcVqe7MMzOklJy0m+zIhDEIOrXaifCa1FJ7YWzg0LDBmBoHv3qI60iLRxzRLOovZKdU29QRyoQ==","shasum":"adca39318d856790a632125b54ec06daef940335","tarball":"https://registry.npmjs.org/@nsfw-filter/gif-frames/-/gif-frames-1.0.1.tgz","fileCount":8,"unpackedSize":1033923,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRQ2FCRA9TVsSAnZWagAAbsQP/0szTZT1AXACmdEToclc\nfHpAtMKW50ikrmUsfo9QIlgBAWpGJS4GQ+5ji+Hs32Oz8UWt8PXj5fUvT+Eg\nCU3CvKZFWVT+PuMZw/7vee38KBIwI/TSYcrvl8rgo2g8RL3nhcmXJmy56V+j\ntZGdrb3qgtLK/WLeHlM9GS1rfm1mfaQmBDW/gIpKOzTR9r8ye4PFBPpMKDuV\nzLC/hkjlza3FuwQl+e6aEpy7jKcGiJJswxrmADDWvv4wAzQj6tMhbj/deQZ5\n6v5BpjBjeYSde1U7reED6jpgWSbeZeaSjjJr5GyUjUZymnyyTZGqhp564ztP\nw+y0tWZi7o44PHpg1kCh4bBW9K1CFDotXUKG5sVTWgT2tC1sk032+uY/cWfh\n5oLfUxaR2zzgjzQdbpV1d95jl4+kTaaMzW9WudZ1F4k/pzgDSgNfDXnBegWl\nSkW3KmYbtili5jCC8aInMQem3SUaN6fC/tSzHzP7R+qgHzRB6+EiwA/kWiQO\n7QMg8Ji+WKmuC+edJ6jiM9bMT8RN2zSSBj86bi0UHNiDpcnpOpu9qqpcpbYT\nAUjTvCJ4Tuby7MAI0ytx75IT+g2+rDk8gTsDlwMSZ/zdo65hkhbOLu6GbzBy\nGs+TxlI5xiwv9Q5pX7NdM33Ejymkw8MWrJFr0/YjOLO/qYtE+idOWlK9VYDU\nuEfH\r\n=gNjI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICKsWAcSC0x1l/xZRU1rKhMacF1YNQMYWz6qq4mI7QptAiEA4b0t66ZUwqZwSzTVB7DxQfZ0ZAtpakpOs79cTEvtJmo="}]},"maintainers":[{"name":"yegorzaremba","email":"yegorzaremba@gmail.com"}],"_npmUser":{"name":"yegorzaremba","email":"yegorzaremba@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gif-frames_1.0.1_1598360962670_0.3909152580131794"},"_hasShrinkwrap":false},"1.0.2":{"name":"@nsfw-filter/gif-frames","version":"1.0.2","description":"Pure JavaScript tool for extracting GIF frames and saving to file","main":"gif-frames.js","types":"gif-frames.d.ts","bundled":"dist/gif-frames.js","bundled-min":"dist/gif-frames.min.js","scripts":{"build:clean":"rimraf dist && mkdirp dist","build:umd":"browserify gif-frames.js -o dist/gif-frames.js -s gifFrames","build:uglify":"uglifyjs dist/gif-frames.js -o dist/gif-frames.min.js","build":"npm run build:clean && npm run build:umd && npm run build:uglify","dev":"mkdirp dist && watchify gif-frames.js -o dist/gif-frames.js -s gifFrames","prepublish":"npm run build","test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/nsfw-filter/gif-frames.git"},"keywords":["gif","frames","extract","save","images","javascript","pure-js"],"author":{"name":"Ben Wiley"},"license":"MIT","bugs":{"url":"https://github.com/nsfw-filter/gif-frames/issues"},"homepage":"https://github.com/nsfw-filter/gif-frames#readme","dependencies":{"@nsfw-filter/save-pixels":"^2.3.4","get-pixels-frame-info-update":"3.3.2","multi-integer-range":"3.0.0"},"devDependencies":{"browserify":"16.2.3","mkdirp":"0.5.1","rimraf":"2.6.1","uglify-js":"3.0.20","watchify":"3.11.0"},"gitHead":"cba0144df47018b7bef216599754f042f9feac62","_id":"@nsfw-filter/gif-frames@1.0.2","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-XZrbJWEN8YfVla5i+PD4Wj51rRlJ8OgnXiPjjOt/OsrbsCR9GZRD4jr953oNWcwiRaoIcOCFWQNMQukO7Yb1dA==","shasum":"a00731e56a944c7cfc8e65f26f6f2a6945432ea6","tarball":"https://registry.npmjs.org/@nsfw-filter/gif-frames/-/gif-frames-1.0.2.tgz","fileCount":8,"unpackedSize":1033884,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRTD9CRA9TVsSAnZWagAAeSAQAJUJgPJmjQN7Bkf86ivq\nmddCRGCSfkSbzxQPX+XslNPTRfts69uFCHcnMv2FwL0R6F3y9sO9UsYxkauX\nne0YyTieIZs1xQUreGlkx4R7aHVGHlpHZSCu9neSBGCHX6NpkhtIZxdu1K4c\nNnmVierMXe9HIDLHmfziYgEYKTtnKjcm4sOqP+lk13in0Ebq+4tyqQPPtqKk\narLTf0rdfR6/bVmF+vbvUT0ZU8FPnWIOSMm9YOiTbxxlFTRVs7ImeNEP0NKL\nlkhWlZBxnUhxZd4EfuDKChajQ51xR6Aos5u0jbqS4v1oQJ00fIu943ITSrB8\nrt9+U+UdLAimnAZ9eca6Cs30fuG4sG09jRq3PlEMjYSzP197VupY6xBXI7SZ\nT2cRmEIKB9QEKu7KED7/OtKJylKOw7NOBhWU3NBB0OzSPf1EJA6MN3aHtJlz\nKtPDt5uWF9WswqOcYHMAduuiZQBa2P2TXgay8ZDc5NoY8EevOFFsNswcB49N\njgyZyoh8CYVG7grzw8g+ahCbK/M1jJWfoYzssMEzjoo5DEnh6pkB3VH6kcTZ\nr1cqtal8GUqedBWWk6JW/ZgqqZ1n/TxuvUDlc5SrW4K1wZHoNlHcd/oUXcqp\nMMKRuMY9NmhzbxyoptRYtX4rXzijb20YieYnEOPB231yamZ0yp3SyZUymzbp\nU0fF\r\n=VIkT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFWgnVpqjJQ9fAdYNlegewOZ30A95CWxRy6TX+duhzU9AiEAoADWXCePgCn8YA+oJi/S3FtR0ooV1TFwm1vAjfbBXzU="}]},"maintainers":[{"name":"yegorzaremba","email":"yegorzaremba@gmail.com"}],"_npmUser":{"name":"yegorzaremba","email":"yegorzaremba@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gif-frames_1.0.2_1598370045353_0.31001459390089425"},"_hasShrinkwrap":false}},"time":{"created":"2020-08-25T13:09:22.299Z","1.0.1":"2020-08-25T13:09:22.826Z","modified":"2022-04-06T10:03:53.633Z","1.0.2":"2020-08-25T15:40:45.558Z"},"maintainers":[{"name":"yegorzaremba","email":"yegorzaremba@gmail.com"}],"description":"Pure JavaScript tool for extracting GIF frames and saving to file","homepage":"https://github.com/nsfw-filter/gif-frames#readme","keywords":["gif","frames","extract","save","images","javascript","pure-js"],"repository":{"type":"git","url":"git+ssh://git@github.com/nsfw-filter/gif-frames.git"},"author":{"name":"Ben Wiley"},"bugs":{"url":"https://github.com/nsfw-filter/gif-frames/issues"},"license":"MIT","readme":"# gif-frames\n\nA pure JavaScript tool for extracting GIF frames and saving to file. Works in Node or the browser. Uses [get-pixels](https://github.com/scijs/get-pixels) and [save-pixels](https://github.com/scijs/save-pixels) under the hood.\n\n[![NPM](https://nodei.co/npm/gif-frames.png)](https://npmjs.org/package/gif-frames)\n\n## Install\n\n```bash\nnpm install gif-frames\n```\n\n### CDN scripts\n\nIf you're not using npm, you can include one of these in your HTML file:\n\n* [https://unpkg.com/gif-frames?main=bundled](https://unpkg.com/gif-frames?main=bundled) (Unminified)\n* [https://unpkg.com/gif-frames?main=bundled-min](https://unpkg.com/gif-frames?main=bundled-min) (Minified)\n\n```html\n<!-- unminified -->\n<script src=\"https://unpkg.com/gif-frames@1.0.1?main=bundled\"></script>\n\n<!-- minified -->\n<script src=\"https://unpkg.com/gif-frames@1.0.1?main=bundled-min\"></script>\n```\n\nThis will expose `gifFrames` as a global variable.\n\n## `require('gif-frames')(options[, callback])`\n\n```javascript\nvar gifFrames = require('gif-frames');\nvar fs = require('fs');\n\ngifFrames({ url: 'image.gif', frames: 0 }).then(function (frameData) {\n  frameData[0].getImage().pipe(fs.createWriteStream('firstframe.jpg'));\n});\n```\n\n### Options:\n\n* `url` (**required**): The pathname to the file, or an [in-memory Buffer](http://nodejs.org/api/buffer.html)\n* `frames` (**required**): The set of frames to extract. Can be one of:\n  - `'all'` (gets every frame)\n  - Any valid [`Initializer`](https://github.com/smikitky/node-multi-integer-range#initializers) accepted by the [multi-integer-range library](https://github.com/smikitky/node-multi-integer-range)\n* `outputType` (*optional*, default `'jpg'`): Type to use for output (see [`type`](https://github.com/scijs/save-pixels#requiresave-pixelsarray-type-options) for `save-pixels`)\n* `quality` (*optional*): Jpeg quality (see [`quality`](https://github.com/scijs/save-pixels#requiresave-pixelsarray-type-options) for `save-pixels`)\n* `cumulative` (*optional*, default `false`): Many animated GIFs will only contain partial image information in each frame after the first. Specifying `cumulative` as `true` will compute each frame by layering it on top of previous frames. *Note: the cost of this computation is proportional to the size of the last requested frame index.*\n\nThe callback accepts the arguments `(error, frameData)`.\n\n### Returns:\n\nA `Promise` resolving to the `frameData` array (if promises are supported in the running environment)\n\n## `frameData`\n\nAn array of objects of the form:\n\n```javascript\n{\n  getImage,\n  frameIndex,\n  frameInfo\n}\n```\n\n### `getImage()`\n\nReturns one of:\n* A drawn canvas DOM element, if `options.outputType` is `'canvas'`\n* A data stream which can be piped to file output, otherwise\n\n###  `frameIndex`\n\nThe index corresponding to the frame's position in the original GIF (not necessarily the same as the frame's position in the result array)\n\n###  `frameInfo`\n\nIt is an Object with metadata of the frame. Fields:\n\nName|Type|Description\n----|-----|-----------\nx | Integer | Image Left Position\ny | Integer | Image Top Position\nwidth | Integer | Image Width\nheight | Integer | Image Height\nhas_local_palette | Boolean | Image local palette presentation flag\npalette_offset | Integer | Image palette offset\npalette_size | Integer | Image palette size\ndata_offset | Integer | Image data offset\ndata_length | Integer | Image data length\ntransparent_index | Integer | Transparent Color Index\ninterlaced | Boolean | Interlace Flag\ndelay | Integer | Delay Time (1/100ths of a second)\ndisposal | Integer | Disposal method\n\nSee [GIF spec for details](http://www.onicos.com/staff/iz/formats/gif.html)\n\n## Examples\n\nWriting selected frames to the file system in Node:\n\n```javascript\nvar gifFrames = require('gif-frames');\nvar fs = require('fs');\n\ngifFrames(\n  { url: 'image.gif', frames: '0-2,7', outputType: 'png', cumulative: true },\n  function (err, frameData) {\n    if (err) {\n      throw err;\n    }\n    frameData.forEach(function (frame) {\n      frame.getImage().pipe(fs.createWriteStream(\n        'image-' + frame.frameIndex + '.png'\n      ));\n    });\n  }\n);\n```\n\nDrawing first frame to canvas in browser (and using a `Promise`):\n\n```javascript\nvar gifFrames = require('gif-frames');\n\ngifFrames({ url: 'image.gif', frames: 0, outputType: 'canvas' })\n  .then(function (frameData) {\n    document.body.appendChild(frameData[0].getImage());\n  }).catch(console.error.bind(console));\n```\n","readmeFilename":"README.md"}