{"_id":"gif-encoder-2","_rev":"6-6a8241d8eefa6d5bbf34100afe56cc01","name":"gif-encoder-2","dist-tags":{"latest":"1.0.5"},"versions":{"1.0.0":{"name":"gif-encoder-2","version":"1.0.0","description":"GIF generator for Node.js","main":"index.js","repository":{"type":"git","url":"git+https://github.com/benjaminadk/gif-encoder-2.git"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"keywords":[],"author":{"name":"benjaminadk","email":"benjaminadk@gmail.com","url":"https://github.com/benjaminadk"},"license":"ISC","gitHead":"e9ba4eb360c4a3d0d2a73adb132bc37485fcae27","bugs":{"url":"https://github.com/benjaminadk/gif-encoder-2/issues"},"homepage":"https://github.com/benjaminadk/gif-encoder-2#readme","_id":"gif-encoder-2@1.0.0","_npmVersion":"6.1.0","_nodeVersion":"10.13.0","_npmUser":{"name":"benjaminadk","email":"benjaminadk@gmail.com"},"dist":{"integrity":"sha512-pLlYgAxRv2w0pHFqajdweeQK4F/hgIc24LeZciUEkjFRIgzSpb4rMepOAqcaDZG9TOdf5jBsRXj8fAqn0wr02Q==","shasum":"43b23264bf00b06d2b18ec65cf229a83b891518a","tarball":"https://registry.npmjs.org/gif-encoder-2/-/gif-encoder-2-1.0.0.tgz","fileCount":8,"unpackedSize":40904,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc/gHDCRA9TVsSAnZWagAA7AIP/2lKSx3RtoYB0VhzxpD6\n3clM3llGo4PmReOFkCgEzBepcXmeifrMjSS0mXt3TEYQLcEBeSSKpCCrApSL\nMWOv2R6Tl2377910g4E+nGR1Ge8TFUgtroPJrAUwDuwXyW+jjdVIjE2T0ZZ4\nMjppxyGPgyzTFkdbpYs/U7BFx2eFYn2rjG20wG+iMaunyEbf2FC5wPv93z2O\nlwx3/aLA7fr6+ReUAIgSQjzvJXP3rY+3b/r+PfrKyHjllXz/yXNtWEqaZLbb\na+fas7VIsm/9FxfaAp6GZj3q4dczEgmpBfCDspfeo4Ki7vC61FPNd1mupba/\no+MeGdEM6qE5KLPC9c13NHCN4iUhFtaJneZlKeR+Hd2t43BwhEZ5rbC+Ub0Q\nFxJO7Vo2nDxF9sWrKEa4XcvDjoPubLlJ4LuxDljleHDrq+mgAf0BBex+vEYO\nwSuM9BOSrlu308yowzvpcPD3UnHc879b8jAFisFOthzL2zGYz3UqmyS/0Irs\n0bE9EmqtkFPf0CA6KcwJFehjTZPiJJlG9sq4afprhbwt/XqIOj69Lk6w03AF\n4yJdIt0/pWtPXj+cTfQfaIWxNp+MjcekVUchQKf4GjBFqX39zaZDv8k2VNlQ\nIhZ0EdWRcOssCACbwyVkWrwkpPGldrP5qDVnan/rIMkaYCoBzKmcnaq1Ca7H\nDAPC\r\n=GYul\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFa2hi6MkTbvy5N1ceCPNrFbPOiZW0dJj75Mse7G/U/TAiEAmkYLxMbPpLXXuPPX4mXc3PCjTEYUFjiasCBgyHQb+C4="}]},"maintainers":[{"name":"benjaminadk","email":"benjaminadk@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gif-encoder-2_1.0.0_1560150466479_0.38225825814584624"},"_hasShrinkwrap":false},"1.0.1":{"name":"gif-encoder-2","version":"1.0.1","description":"GIF generator for Node.js","main":"index.js","repository":{"type":"git","url":"git+https://github.com/benjaminadk/gif-encoder-2.git"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"keywords":[],"author":{"name":"benjaminadk","email":"benjaminadk@gmail.com","url":"https://github.com/benjaminadk"},"license":"UNLICENSE","gitHead":"eeb7b0419b92972d6f850ca24b4cfac5306eff47","bugs":{"url":"https://github.com/benjaminadk/gif-encoder-2/issues"},"homepage":"https://github.com/benjaminadk/gif-encoder-2#readme","_id":"gif-encoder-2@1.0.1","_npmVersion":"6.1.0","_nodeVersion":"10.13.0","_npmUser":{"name":"benjaminadk","email":"benjaminadk@gmail.com"},"dist":{"integrity":"sha512-6T6NmfZVQQ1vA6sl1TRRWbl1HSVcvJZZ5esmf09SLgm/exrAvibH7vn8F/JWdZEMH/BzwTvGLLNklpbvcwtSug==","shasum":"0a535e24a83c35f630e805085ad4caf3caffd819","tarball":"https://registry.npmjs.org/gif-encoder-2/-/gif-encoder-2-1.0.1.tgz","fileCount":8,"unpackedSize":35107,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdAM1wCRA9TVsSAnZWagAA9AQQAJO/+sMWf4/tRMAuuDWT\nLwIZYEyPuHuHaUurS71tUA0LMzL+rP6yTaAyJIle5FVPYq/pq/nxkGD0ysy0\nfKDGQND/p6lHNrt1ojMEtpg3lj2bSEOSuc3k2le2zg1+cfADAP8rv5+u04lB\nfRvDPKlhjqyh9vpu8xOApedzs3flL2+iHXG5+jVb9oKSyMzR8yfFLcEBW/bu\nTmMjPpvnK+Ea+ELWyufNvnTWf/bI2kwbjJiMKin1fiP/9PuZHJxnvOaCm1g8\nfeVATEcZ5hpsKmtfH25tzBI3vOBs3FKR+w/u5J6PNVoEAL5YmfF6sKh+5lpN\npYqGhp5Et4svSpap9ie/UFw3ThLvmckdPS9VcZhs/fISJKij/rzw5KykU3Yx\n3YySk3PIsx2tigWg0ot+5ZrIWcuArGcVfukPTrqd3p6ml/DZmH6r1zHhbJba\n8KCPLdaUZDQ8GR9Ld0Mv/WcCi6MdUtolTuCbEdVbbsZ6bzMzb25q4UdkQKHI\nPA9A2rB66rVDr9gj91XEAq/UMyOD4GKnUZYzVWMt4oDebRVRsX0pNv7ypDQi\n4xNy5QJwJX30S1E58CnK1Ybt9JzuDs29iQeb0cpZHB5CY0e+b0n0W0efdMun\nXVWwKVGN5uCSvgDucmtpmPx7cmCE+gX8k73B7vSrwRi9RyO/RaLtNHW9DIh+\nAORP\r\n=HH4k\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCiIMJ5z+Io2ykyuSdok/viIKVhInA3YgNuZPShF17a8QIhANvO6DrVnRiWeOGcg6SC8FtTCyPdjsx/o1AFFCTgZA2v"}]},"maintainers":[{"name":"benjaminadk","email":"benjaminadk@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gif-encoder-2_1.0.1_1560333679366_0.8329576106311511"},"_hasShrinkwrap":false},"1.0.2":{"name":"gif-encoder-2","version":"1.0.2","description":"GIF generator for Node.js","main":"index.js","repository":{"type":"git","url":"git+https://github.com/benjaminadk/gif-encoder-2.git"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"keywords":[],"author":{"name":"benjaminadk","email":"benjaminadk@gmail.com","url":"https://github.com/benjaminadk"},"license":"UNLICENSE","gitHead":"8eda8e6113dc6765f3bd7d49f07efc84d44d1ae1","bugs":{"url":"https://github.com/benjaminadk/gif-encoder-2/issues"},"homepage":"https://github.com/benjaminadk/gif-encoder-2#readme","_id":"gif-encoder-2@1.0.2","_npmVersion":"6.1.0","_nodeVersion":"10.13.0","_npmUser":{"name":"benjaminadk","email":"benjaminadk@gmail.com"},"dist":{"integrity":"sha512-tWvgw6LGWmk9LFzmC6TjPgv54vth54nFQPtuiwEydw7hpmHtYPAwt8KJp4+XurvRi8w1rj8bkiDaK70Hf5NTcQ==","shasum":"4102fee2720f197d206ed3465d66c6c4d6ab07da","tarball":"https://registry.npmjs.org/gif-encoder-2/-/gif-encoder-2-1.0.2.tgz","fileCount":8,"unpackedSize":37932,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdANgQCRA9TVsSAnZWagAANtAP/0zzX4KWbi1lm1/rRQHi\nAQXVcHtfJn79aDwyNYKUTp75LLuN8KdAfkprZGUGUzfjmlsff+ePGOtoZJvt\n92QGWkSLIyAq53tbp0+7mIlEcDy4BmkternYMypHpikkRBJ6RpCL9qnNZj/d\nILYDxwJ4kZKdWevyf8apKR1vuA8pAHHCJJ5yduCA7N1+thzmCKURDF3i+54O\nRRDsE/DrM9JG4QZAw6rFjce9XD5JfkbvVEcI1dyo+ZVYyhgE/1YKKw+qg7s1\nLq0nS2SMspWyv1x6fmxH0qGC0QQz44uNb8wJRkqnfVAjmvbVoEPcuI+rvyZy\nOyx1yTvE1xi4+2Fb4BU/BebMh1pxBAf0kjsZOF+sbvLygYj+dm/ym1StzU/R\nrSkCC/Y21Q5AMa7+VIiMixubcNFCxZCp3FQvxWaIDGxAzlHdV3TVsRyUGmek\nJrc1GsnOfoAq074bCToR7eHh/Vc7hsThN6H3lJTAk6TMNxR5EfQglqnWIVmL\njtklYMf1V+wQVvrswPgpQOhwUAPEJZvUPQPn6sfV1EVK4Q4IlprU4lXDWWZX\nk01idgjU6DxDQaS82pRph98CD+w0GH3JDuQ0VLRh3ubbPI+3KJ41lmAi8UrX\nsRo6Sa9DC0ta+nrC4WRkEWITghW5Sl2bjkpTIpuvzmzFVLuapenjkB92PMfS\nfHUZ\r\n=mefc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEAdFb01qDeshIC+0CYVRLKRsb3BpTRIqckSv7cto4AwAiEA4bpAmkYR1nkAeidtCMZ7n0WJzJ4PMfI7R2m9myI3hhA="}]},"maintainers":[{"name":"benjaminadk","email":"benjaminadk@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gif-encoder-2_1.0.2_1560336400188_0.35957726470503015"},"_hasShrinkwrap":false},"1.0.3":{"name":"gif-encoder-2","version":"1.0.3","description":"GIF generator for Node.js","main":"index.js","repository":{"type":"git","url":"git+https://github.com/benjaminadk/gif-encoder-2.git"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"keywords":[],"author":{"name":"benjaminadk","email":"benjaminadk@gmail.com","url":"https://github.com/benjaminadk"},"license":"UNLICENSE","devDependencies":{"canvas":"2.5.0"},"gitHead":"9c563c422fd175367db88a332e6aa4b2bb662346","bugs":{"url":"https://github.com/benjaminadk/gif-encoder-2/issues"},"homepage":"https://github.com/benjaminadk/gif-encoder-2#readme","_id":"gif-encoder-2@1.0.3","_npmVersion":"6.1.0","_nodeVersion":"10.13.0","_npmUser":{"name":"benjaminadk","email":"benjaminadk@gmail.com"},"dist":{"integrity":"sha512-Fe8U0vG06Tiu33wCiKzcBeNcqm22zzJI2FrdpgLgf9yPQ9Md+LU03zIIWTmKTpoFcGU6UDJfezG1vk5ybK20wg==","shasum":"f027c68bdad25fc1d42e99a128ee36c43c97b23a","tarball":"https://registry.npmjs.org/gif-encoder-2/-/gif-encoder-2-1.0.3.tgz","fileCount":8,"unpackedSize":41110,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdAhFrCRA9TVsSAnZWagAA70EP/RH6ffOLewGjvWGiBWBJ\nHG3+/8a3k/bCb840j1VqvFjyBY6TU+Vc46FvUDlfDAy9qeTFuNSwF0FlXnzf\nebRSGdAfBEOp+STXPNVvJZ4+5KoJCp/HY6WwMFbOvO6idH8oUEc7tZgXSIgG\nMbztBSAnPloQowrWrf0ctXGM6dFXlkUSgZruzSDtaNOuysl152zZq+7WAvPx\nqNl5O8xTNjhxrETD7SeRREWExdXQNVLCArdBK1QMy1mAKa2jNHsdNtNznGfG\nUqiYFqLtfAsy8L3lCfSF7EzJcB4+Q3cCB+jGfKRPOCd9GePK7mfb2JZbrwCz\nWuF8WtrJvsIm0Of8ErTKQc8g+uhtrS43sHBVRWRLVpz3j12eM42Ue/M9Ek/h\nOZdcuxhD6TmadxAfFBUBjZeHxfGEvZzcE4NTnlB68FB+zDpSuRJeqFo/Qsii\n79xawb/t1g4Lc8h0k7bDOQOSR0as+Kar8/3I9wz4xHmkh6zwNEoUqQjxqWYe\n5UZYxbRpcu82zt7jTSJLXQjedckja39Vawx4h3U3qLq+LjO5BaJZsbQibvjm\nu1YwLC19q8dguocabT02kkqfXS/30QaF+qeAeNI4ONk0/uADGpID6MI5ITY0\nVEYj2ZdGvZFMfwOOoBOH07IlCi0FZy1yUPa38fmd19hoFa2lV8ivChHWR5qQ\n8Hlv\r\n=qzef\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGkXQXAHuGc45rzoWgTuhLohR0OG3CxhYk+oQGZjSF2aAiBkiV2PeBGWGIhzLsxmNi4OvFcRifZEJhYGyc4DwDcUYg=="}]},"maintainers":[{"name":"benjaminadk","email":"benjaminadk@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gif-encoder-2_1.0.3_1560416617829_0.4565419716049155"},"_hasShrinkwrap":false},"1.0.4":{"name":"gif-encoder-2","version":"1.0.4","description":"GIF generator for Node.js","main":"index.js","repository":{"type":"git","url":"git+https://github.com/benjaminadk/gif-encoder-2.git"},"keywords":["gif","encoder","image","node"],"author":{"name":"benjaminadk","email":"benjaminadk@gmail.com","url":"https://github.com/benjaminadk"},"license":"UNLICENSE","devDependencies":{"canvas":"2.5.0"},"gitHead":"8355b97538cf0e8f84ca5f1e52255aa1a23d729f","bugs":{"url":"https://github.com/benjaminadk/gif-encoder-2/issues"},"homepage":"https://github.com/benjaminadk/gif-encoder-2#readme","_id":"gif-encoder-2@1.0.4","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-ms2E1lHN1tpcA7SGs5nZfR8mOmYUwfAebH8EhDhjZe9HCvAKsbtck06/PuGSSwVd0UJ7XXcuAvMkuxxnIO2CcQ==","shasum":"89d3fd07f63562a23f6af6d76f12bc1d09fc5606","tarball":"https://registry.npmjs.org/gif-encoder-2/-/gif-encoder-2-1.0.4.tgz","fileCount":8,"unpackedSize":42326,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdYe+jCRA9TVsSAnZWagAA0gcP/A/lK7mYdQ+1dIAqpFvB\nfzHVHWlG8Yj32HRwa5nAbPPsS0Hh8A/Qfw5eK3S7s84G9Pwg829/2f/2j+px\nv3ytAQBNb7Bgsoo44pDQU9+ODBqdjKad3gylmRrzCGmVi9x3VYxCM45JpPRD\nL26Wfbbjm9fSm1dnxIFcjKBftVZRtaehDtlKNyh13QmDtiEw2eiHvq5D3MEy\nIBN0d4VRKSvMHu/96Rf0p7bEYUjNrdEgNp+ZP39iLs6zOd/gXb+d6i4Odyvu\nGeh+yDNcIAepKeJmT8gwhrjRsDjTeehaAZ/31uhXR8k4AKvp7q7cpvXJKka2\n9wOfzpfscBQvplITannsdi+cO9amoR0KgoeUj173lZtZHw1E9uN7UFnvsPxL\nNdSprFZe3Mc6+wid4S9OM7CkshhsqKfKbQQ+oFU0hxiJDQ32lx4vwu9rWl9G\nkK6Y7bbzuT4rXRazAiqK3aYoNUUg/5UG/HijfNR3pVI7P7QWEsaM+Hz7L955\nSJ+zKpelUxutxjRdH4u2DCLt/khmbOgxtRpee4vO+uh1VDTFwZc3RxGXZn08\nBbBb5fc4Eq/OM8PiFNpNEiEYfXnZ7sS/P6diARrDXhnlyk/Sptu5VBfzO0Gd\nwOp3S5FtKaJzWBMoOZqQmWhmW2Z6npG6JxfaCOHeDFoG5pcmtYDwRWq5sw5A\nEhV+\r\n=BExP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC9q/05NIoW6UApWGD7paZdPL3b/7u9pewPd8BxVOmUYAIgRKGlR5PHdnqzc2uWlOdEGmmxOdhnTgvSBv52kbhQRmU="}]},"maintainers":[{"name":"benjaminadk","email":"benjaminadk@gmail.com"}],"_npmUser":{"name":"benjaminadk","email":"benjaminadk@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gif-encoder-2_1.0.4_1566699426705_0.6641403891771236"},"_hasShrinkwrap":false},"1.0.5":{"name":"gif-encoder-2","version":"1.0.5","description":"GIF generator for Node.js","main":"index.js","repository":{"type":"git","url":"git+https://github.com/benjaminadk/gif-encoder-2.git"},"keywords":["gif","encoder","image","node"],"author":{"name":"benjaminadk","email":"benjaminadk@gmail.com","url":"https://github.com/benjaminadk"},"license":"UNLICENSE","devDependencies":{"canvas":"2.5.0"},"gitHead":"119bcd8b78d715829764e372bcfc902ee36788d9","bugs":{"url":"https://github.com/benjaminadk/gif-encoder-2/issues"},"homepage":"https://github.com/benjaminadk/gif-encoder-2#readme","_id":"gif-encoder-2@1.0.5","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-fsRAKbZuUoZ7FYGjpFElmflTkKwsn/CzAmL/xDl4558aTAgysIDCUF6AXWO8dmai/ApfZACbPVAM+vPezJXlFg==","shasum":"872ae04d8028de4a3417646ceb80dda88d6247b9","tarball":"https://registry.npmjs.org/gif-encoder-2/-/gif-encoder-2-1.0.5.tgz","fileCount":8,"unpackedSize":42353,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdYgDWCRA9TVsSAnZWagAA7QMP+QHudrLALNCZckCvK27C\nshdSfE84P6N1YaGY3jmatpWtYVUJ0ROV27+maD2Ava/RRkPmBIG0eadIlTKZ\nTP+n1eQACrtuEin7WjcyoHqwe/iPbiV10oU1S6j97mvcPFmntHTGlsqkdmuw\nWGzvrBjir4pK+1TdzRlRKADGTwC9o4XRmGQlF2zubi4uqqARpEgNQKdEWFIE\nshPiqbXcdWOUY/z3ECE/+ZeAbnQt4kZDcTBWyKoApJNpulIfb7GHUSpySQVD\ng0quj9NWlDqD6kntU6IiGQH5A0+LVXqzzeSF9ry7cra/08sDwdTXobjoqVOJ\nswJvQkCsNZ+b/q6F9b1aF0ZQ+TAc8mOcI2iTX8TJL/CigTgZHC7ECGxDWJfM\nmtOTwk/j0fUH8R5Y/ygR2NFmwzJxx2N5GIld0EcNlcA5h7QWTTGWiJtnzkuv\ntVp88oaFZilpCIv9MDQ2KcIZ2yJemoOd8FHLUBWEIxQ2TwCNKdrV9713tQpP\nOHYYeVxur2cdVpkBSIWV63fEAt4l5CDdraNuQg0iOCGjkrIT5MmFYRNtpNRL\nrYDB6hKLb5apnAKiv5oafNXCzBjDe4Oixcv/86xOw4XgcaL6B2SsIFiWZPt8\nFRWYMBv1tsD92dV9DT4cUIvBqAk/3BNF6sXr6IAhMgt0/AXa8OH2CLAfTHC8\npaKR\r\n=MJX0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA+1oWwLUMjbtJS56cJ0xngIteRUDrSWiiX3/w+SqJ9+AiA2VpAlMGpRAkq0zS687bBHGNCR1a2mheBH2C88JeK5aQ=="}]},"maintainers":[{"name":"benjaminadk","email":"benjaminadk@gmail.com"}],"_npmUser":{"name":"benjaminadk","email":"benjaminadk@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gif-encoder-2_1.0.5_1566703829609_0.698816491834789"},"_hasShrinkwrap":false}},"time":{"created":"2019-06-10T07:07:46.479Z","1.0.0":"2019-06-10T07:07:46.705Z","modified":"2022-05-03T18:11:43.699Z","1.0.1":"2019-06-12T10:01:19.487Z","1.0.2":"2019-06-12T10:46:40.349Z","1.0.3":"2019-06-13T09:03:38.006Z","1.0.4":"2019-08-25T02:17:06.839Z","1.0.5":"2019-08-25T03:30:29.815Z"},"maintainers":[{"name":"benjaminadk","email":"benjaminadk@gmail.com"}],"description":"GIF generator for Node.js","homepage":"https://github.com/benjaminadk/gif-encoder-2#readme","keywords":["gif","encoder","image","node"],"repository":{"type":"git","url":"git+https://github.com/benjaminadk/gif-encoder-2.git"},"author":{"name":"benjaminadk","email":"benjaminadk@gmail.com","url":"https://github.com/benjaminadk"},"bugs":{"url":"https://github.com/benjaminadk/gif-encoder-2/issues"},"license":"UNLICENSE","readme":"# gif-encoder-2\r\n\r\nEncode GIFs with Node.js\r\n\r\n## Contents\r\n\r\n- [Installation](#installation)\r\n- [Overview](#overview)\r\n- [Usage](#usage)\r\n  - [Constructor](#constructor)\r\n  - [Methods](#methods)\r\n- [Examples](#examples)\r\n  - [Canvas Animation](#canvas-animation)\r\n  - [Sequencial Images](#sequencial-images)\r\n- [Algorithms](#algorithms)\r\n- [Optimizer](#optimizer)\r\n- [Progess Event](#progress-event)\r\n\r\n## Installation\r\n\r\n```\r\nnpm install gif-encoder-2\r\n```\r\n\r\n## Overview\r\n\r\nThis library builds on top of previous _JavaScript_ _GIF_ encoders including [jsgif](https://github.com/antimatter15/jsgif) and [gifencoder](https://github.com/eugeneware/gifencoder).\r\n\r\nThis library adds the [Octree](https://en.wikipedia.org/wiki/Octree) quantization algorithm as an alternative to the original _NeuQuant_ algorithm.\r\n\r\nThis library adds a simple optimizer to speed up overall processing time of both algorithms.\r\n\r\nThis library adds a progress event.\r\n\r\nThis library is designed to be used in a _Node_ environment, including the [Electron](https://electronjs.org/) renderer process. [Node Canvas](https://github.com/Automattic/node-canvas) can be a useful peer library but isn't required. The [HTML Canvas API] can be used in _Electron_.\r\n\r\n## Usage\r\n\r\n### Constructor\r\n\r\n`GIFEncoder(width, height, algorithm, useOptimizer, totalFrames)`\r\n\r\n|   Parameter    |  Type   |          Description           | Required |  Default   |\r\n| :------------: | :-----: | :----------------------------: | :------: | :--------: |\r\n|    `width`     | number  | the width of images in pixels  |   yes    |    n/a     |\r\n|    `height`    | number  | the height of images in pixels |   yes    |    n/a     |\r\n|  `algorithm`   | string  |     `neuquant` or `octree`     |    no    | `neuquant` |\r\n| `useOptimizer` | boolean |   enables/disables optimizer   |    no    |   false    |\r\n| `totalFrames`  | number  |     total number of images     |    no    |     0      |\r\n\r\n```javascript\r\nconst encoder = new GIFEncoder(500, 500)\r\nconst encoder = new GIFEncoder(1200, 800, 'octree', false)\r\nconst encoder = new GIFEncoder(720, 480, 'neuquant', true, 20)\r\n```\r\n\r\n### Methods\r\n\r\n|        Method        |    Parameter     |               Description               |                           Notes                            |\r\n| :------------------: | :--------------: | :-------------------------------------: | :--------------------------------------------------------: |\r\n|       `start`        |       n/a        |           Starts the encoder            |                            n/a                             |\r\n|      `addFrame`      | `Canvas Context` |         Adds a frame to the GIF         |                            n/a                             |\r\n|      `setDelay`      |      number      | Number of milliseconds to display frame |                Can be set once or per frame                |\r\n| `setFramesPerSecond` |      number      | Number of frames per second to display  |                  Another way to set delay                  |\r\n|     `setQuality`     |   number 1-30    |            Neuquant quality             |                     1 is best/slowest                      |\r\n|    `setThreshold`    |   number 0-100   |     Optimizer threshold percentage      | Color table reused if current frame matches previous frame |\r\n|     `setRepeat`      |   number >= 0    |        Number of loops GIF does         |   0 is forever, anything else if literal number of loops   |\r\n|       `finish`       |       n/a        |            Stops the encoder            |              Call after all frames are added               |\r\n\r\n## Examples\r\n\r\n### Canvas Animation\r\n\r\nDraw a square that changes color as it moves.\r\n\r\n```javascript\r\nconst GIFEncoder = require('gif-encoder-2')\r\nconst { createCanvas } = require('canvas')\r\nconst { writeFile } = require('fs')\r\nconst path = require('path')\r\n\r\nconst size = 200\r\nconst half = size / 2\r\n\r\nconst canvas = createCanvas(size, size)\r\nconst ctx = canvas.getContext('2d')\r\n\r\nfunction drawBackground() {\r\n  ctx.fillStyle = '#ffffff'\r\n  ctx.fillRect(0, 0, size, size)\r\n}\r\n\r\nconst encoder = new GIFEncoder(size, size)\r\nencoder.setDelay(500)\r\nencoder.start()\r\n\r\ndrawBackground()\r\nctx.fillStyle = '#ff0000'\r\nctx.fillRect(0, 0, half, half)\r\nencoder.addFrame(ctx)\r\n\r\ndrawBackground()\r\nctx.fillStyle = '#00ff00'\r\nctx.fillRect(half, 0, half, half)\r\nencoder.addFrame(ctx)\r\n\r\ndrawBackground()\r\nctx.fillStyle = '#0000ff'\r\nctx.fillRect(half, half, half, half)\r\nencoder.addFrame(ctx)\r\n\r\ndrawBackground()\r\nctx.fillStyle = '#ffff00'\r\nctx.fillRect(0, half, half, half)\r\nencoder.addFrame(ctx)\r\n\r\nencoder.finish()\r\n\r\nconst buffer = encoder.out.getData()\r\n\r\nwriteFile(path.join(__dirname, 'output', 'beginner.gif'), buffer, error => {\r\n  // gif drawn or error\r\n})\r\n```\r\n\r\n<p align=\"center\">\r\n<img src=\"https://raw.githubusercontent.com/benjaminadk/gif-encoder-2/master/examples/output/beginner.gif\" />\r\n</p>\r\n\r\n### Sequencial Images\r\n\r\nCreate a function that reads a directory of images and turns them into a _GIF_.\r\n\r\n```javascript\r\nconst GIFEncoder = require('gif-encoder-2')\r\nconst { createCanvas, Image } = require('canvas')\r\nconst { createWriteStream, readdir } = require('fs')\r\nconst { promisify } = require('util')\r\nconst path = require('path')\r\n\r\nconst readdirAsync = promisify(readdir)\r\nconst imagesFolder = path.join(__dirname, 'input')\r\n\r\nasync function createGif(algorithm) {\r\n  return new Promise(async resolve1 => {\r\n    // read image directory\r\n    const files = await readdirAsync(imagesFolder)\r\n\r\n    // find the width and height of the image\r\n    const [width, height] = await new Promise(resolve2 => {\r\n      const image = new Image()\r\n      image.onload = () => resolve2([image.width, image.height])\r\n      image.src = path.join(imagesFolder, files[0])\r\n    })\r\n\r\n    // base GIF filepath on which algorithm is being used\r\n    const dstPath = path.join(__dirname, 'output', `intermediate-${algorithm}.gif`)\r\n    // create a write stream for GIF data\r\n    const writeStream = createWriteStream(dstPath)\r\n    // when stream closes GIF is created so resolve promise\r\n    writeStream.on('close', () => {\r\n      resolve1()\r\n    })\r\n\r\n    const encoder = new GIFEncoder(width, height, algorithm)\r\n    // pipe encoder's read stream to our write stream\r\n    encoder.createReadStream().pipe(writeStream)\r\n    encoder.start()\r\n    encoder.setDelay(200)\r\n\r\n    const canvas = createCanvas(width, height)\r\n    const ctx = canvas.getContext('2d')\r\n\r\n    // draw an image for each file and add frame to encoder\r\n    for (const file of files) {\r\n      await new Promise(resolve3 => {\r\n        const image = new Image()\r\n        image.onload = () => {\r\n          ctx.drawImage(image, 0, 0)\r\n          encoder.addFrame(ctx)\r\n          resolve3()\r\n        }\r\n        image.src = path.join(imagesFolder, file)\r\n      })\r\n    }\r\n  })\r\n}\r\n\r\ncreateGif('neuquant')\r\ncreateGif('octree')\r\n```\r\n\r\n**NeuQuant Algorithm**\r\n\r\n<img src=\"https://raw.githubusercontent.com/benjaminadk/gif-encoder-2/master/examples/output/intermediate-neuquant.gif\" />\r\n\r\n**Octree Algorithm**\r\n\r\n<img src=\"https://raw.githubusercontent.com/benjaminadk/gif-encoder-2/master/examples/output/intermediate-octree.gif\" />\r\n\r\n## Algorithms\r\n\r\n- _NeuQuant_ tends to perform faster than _Octree_\r\n- _Octree_ tends to output a smaller file than _NeuQuant_\r\n- _Octree_ produces a slight banding effect\r\n\r\nThe example above encodes 20 images measuring 300px x 240px. The output file from _NeuQuant_ is 1172KB and the _Octree_ is less than half of that at 515KB.\r\n\r\n## Optimizer\r\n\r\nThe optimizer works by reusing the color palette from the previous image on the current image. This can reduce the overall processing time signifigantly but its best suited for a sequence of similarly colored images. Use the `setThreshold` method to set a percentage determining how similar the two images must be to trigger the optimizer. The default is `90%`. The optimizer is only used if `true` is passed as the 4th argument to the constructor.\r\n\r\n## Progress Event\r\n\r\nWorks if `totalFrames` is expressed in constructor, otherwise this value will be 0.\r\n\r\n```javascript\r\nencoder.on('progress', percent => {\r\n  // do something with percent value\r\n})\r\n```\r\n","readmeFilename":"README.md"}