{"_id":"pixl-canvas-plus","_rev":"39-6a86a9cb8d906e23fb023a2683c8e604","name":"pixl-canvas-plus","dist-tags":{"latest":"4.0.0"},"versions":{"1.0.0":{"name":"pixl-canvas-plus","version":"1.0.0","keywords":["image","canvas","rgba"],"author":{"name":"Joseph Huckaby","email":"jhuckaby@gmail.com"},"license":"MIT","_id":"pixl-canvas-plus@1.0.0","maintainers":[{"name":"jhuckaby","email":"jhuckaby@gmail.com"}],"homepage":"https://github.com/jhuckaby/canvas-plus","bugs":{"url":"https://github.com/jhuckaby/canvas-plus/issues"},"dist":{"shasum":"3c132aa79b5f56f4e964a513cec574d1b7bbe665","tarball":"https://registry.npmjs.org/pixl-canvas-plus/-/pixl-canvas-plus-1.0.0.tgz","fileCount":32,"integrity":"sha512-P35PFXMVLqc5qccV2i3LVYgDMXwDPPaNAWMExSs8e+ByrkttX/pkJgBYOke3UxEtgY6ONrVrdL0F/WQxreRFpg==","signatures":[{"sig":"MEUCIGmjSxHi4+vcEsTZSK5N1TqdlmDdfkwSz4WTxGXrb9VRAiEA0G8jb6AsdF6oJPXH8nVZPt96tDcw3w3TGmQLh+Fdn6s=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":952821,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa8o8yCRA9TVsSAnZWagAADIYP/3N3Dl6UT5HPCNR9q2xe\n5dwZ0W84Fi/TQees9EUHRB1A1Fe1Br4I5vCfs3YE0Vk45qtCCd+pN5pGQFr/\n2ppqtMbbzAYrD7ZERsKCPhYrSik1Dv24nuSubFXm2r6wA4civmggGp0rrSwQ\nZIGa3LBfFf5mFNEsPO/wNzTuEfL4uraG3WEyrgEmukQC5KvV0gCxQJSKAvci\nbUtaG1/YyBj4LzhXslB0sFnRUk9bJKM7bpqOoio6GorzjDvyGlUALFUwjdlQ\nuQaAA8T7N6wBmymgRj2iL6vAT0+2WfCqqIyYEIZoJrcak1fbrZQhLpcjF577\nz5qlLQJTIQJ9425mWJVIlamTsIosw9+pbQXSGbffUrHOSgeiy2ETM70HCzCP\nbbeWBdED7N0/dy1ZsKzVicCVGfFD4afaUTxp4pZiL8/auf8BH99Eo1aENQNC\nzhMBlsZtLQkEsfeKxcn9Eb0qsEnT4Zi3IpW5lXbTO8vLxhTXyyskbiIxhHt4\nMyv+Y8g4ELuKSWq6XFxdIegT7lcFuT9HCifbdI1jJgaXXGry1UPAszhu9Elh\n/DDYMLxL5v6E+4LpmZp8HP3H9SQI2QGND7HTGpJMW9Sz5ZJZUcJOIK1R38xV\noTYC4THO7ecEmvQI+5743wmnAUEi1U82n+tC+Pi0X/WWkMlC/5/HBq9gwO22\n5lkL\r\n=+cTg\r\n-----END PGP SIGNATURE-----\r\n"},"main":"main.js","browser":{"./lib/node/font.js":"./lib/browser/font.js","./lib/node/load.js":"./lib/browser/load.js","./lib/node/write.js":"./lib/browser/write.js","./lib/node/create.js":"./lib/browser/create.js"},"gitHead":"d3104dd97d4ebf6d3820468712ff9d3668dfdb90","scripts":{"browserify":"browserify browser.js > canvas-plus.js"},"_npmUser":{"name":"jhuckaby","email":"jhuckaby@gmail.com"},"repository":{"url":"git+https://github.com/jhuckaby/canvas-plus.git","type":"git"},"_npmVersion":"5.6.0","description":"A universal library for manipulating images, built on canvas.","directories":{},"_nodeVersion":"8.9.4","dependencies":{"canvas":"1.6.10","crc-32":"1.0.2","omggif":"1.0.8","exif-js":"2.2.1","image-q":"1.1.1","pixl-perf":"^1.0.0","image-size":"0.6.0","pixl-class":"^1.0.0","pixl-tools":"^1.0.0","pixl-request":"^1.0.0","blob-to-buffer":"1.2.6"},"_hasShrinkwrap":false,"devDependencies":{"browser-process-hrtime":"0.1.2"},"_npmOperationalInternal":{"tmp":"tmp/pixl-canvas-plus_1.0.0_1525845806765_0.6580658362971636","host":"s3://npm-registry-packages"}},"1.0.1":{"name":"pixl-canvas-plus","version":"1.0.1","keywords":["image","canvas","rgba"],"author":{"name":"Joseph Huckaby","email":"jhuckaby@gmail.com"},"license":"MIT","_id":"pixl-canvas-plus@1.0.1","maintainers":[{"name":"jhuckaby","email":"jhuckaby@gmail.com"}],"homepage":"https://github.com/jhuckaby/canvas-plus","bugs":{"url":"https://github.com/jhuckaby/canvas-plus/issues"},"dist":{"shasum":"949e0960ae801bfb59965c1451a4595e55bc6b22","tarball":"https://registry.npmjs.org/pixl-canvas-plus/-/pixl-canvas-plus-1.0.1.tgz","fileCount":33,"integrity":"sha512-bx+6Kq+mDqNR17mNW/iyLKul3yy1RsuEVqkbRbGE/kTj5Hlc42MujpvO3GnGinA6bmRqHXPIC3brM3qW3OQuJw==","signatures":[{"sig":"MEYCIQDiA6Agv1BbFsFnXJsIU0AFVhcqN4j90jlhYqUmzzsHCwIhAIVGyus5f3VyDINw+eFfR5MJTvN9AfYHmMh9SkQqy8ZX","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":953936,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa/PdsCRA9TVsSAnZWagAAQKAQAI4v1avXzSm6qrigNHwY\n4OMdZEzSUx5ubqei/0M4hGDpcvdAOR7+BkZqxrPtK3nLevg+49sxm469Vqh0\ni19LntY6I2Zg64hVpNqdabRTu+nP5Luf0fe1itnmWdkuBxOjG0W+hwu+cw8+\nuouCijkVktdXN47QieCpkOZF66wqWdzywdYsDkC+8ff1BE/vu6pfJrsIlIjl\n0Ab9g/7WUSmSYKziCnVm+F4y5S6fasqI/4sjCFzMqezNYMkv1JVozXwh5YRR\nNuFcdLCNUHtKGW9NSn3MEoelMMFOy40+5aE/5n0AJ7BVEg0SnXessRQNXgrD\nG9xv4xATzxSG9bOV9XbFIOuhgpa9zYrjcvLMwdkY6tBt4oh+OCn3OMmxXDvM\nZpDf77wAfTZlIe9O1WM0of2BLevLaIp0S/ip9+vwm8/sLo5NH8gDENERDDts\n7bcs8ELrb9Ep1KUNZ+c3H6diJ6xXQC4hQerfzXVY+NlOaCePGV+QWKhCXGlo\nQ+RTABaFP5DUxozXsTevRuy5Mick+Q+heLS2u332nxZPXc6wMx0FBFM0SrT3\n20PbzJbYs+DNugQH48wVuwCfk5WRWGkfPCELPgh43GeaxT78NvEORkDjbPq5\nBDKgc2jn4qmoZLn8gZ6Gow/z+2aMjgk49sZ+rdkbH8+nmZS0EuO6aRl+ALmE\nFjsQ\r\n=jBIP\r\n-----END PGP SIGNATURE-----\r\n"},"main":"main.js","browser":{"./lib/node/font.js":"./lib/browser/font.js","./lib/node/load.js":"./lib/browser/load.js","./lib/node/write.js":"./lib/browser/write.js","./lib/node/create.js":"./lib/browser/create.js"},"gitHead":"53c00a8f5a7f8df611221105e031bf0a2b11c752","scripts":{"browserify":"browserify browser.js > canvas-plus.js"},"_npmUser":{"name":"jhuckaby","email":"jhuckaby@gmail.com"},"repository":{"url":"git+https://github.com/jhuckaby/canvas-plus.git","type":"git"},"_npmVersion":"5.6.0","description":"A universal library for manipulating images, built on canvas.","directories":{},"_nodeVersion":"8.9.4","dependencies":{"canvas":"1.6.10","crc-32":"1.0.2","omggif":"1.0.8","exif-js":"2.2.1","image-q":"1.1.1","pixl-perf":"^1.0.0","image-size":"0.6.0","pixl-class":"^1.0.0","pixl-tools":"^1.0.0","pixl-request":"^1.0.0","blob-to-buffer":"1.2.6"},"_hasShrinkwrap":false,"devDependencies":{"browser-process-hrtime":"0.1.2"},"_npmOperationalInternal":{"tmp":"tmp/pixl-canvas-plus_1.0.1_1526527849212_0.17915611522254715","host":"s3://npm-registry-packages"}},"1.0.2":{"name":"pixl-canvas-plus","version":"1.0.2","keywords":["image","canvas","rgba"],"author":{"name":"Joseph Huckaby","email":"jhuckaby@gmail.com"},"license":"MIT","_id":"pixl-canvas-plus@1.0.2","maintainers":[{"name":"jhuckaby","email":"jhuckaby@gmail.com"}],"homepage":"https://github.com/jhuckaby/canvas-plus","bugs":{"url":"https://github.com/jhuckaby/canvas-plus/issues"},"dist":{"shasum":"5353f64a4ac0b5af327f6c8ebcee1c9b136003b1","tarball":"https://registry.npmjs.org/pixl-canvas-plus/-/pixl-canvas-plus-1.0.2.tgz","fileCount":33,"integrity":"sha512-NPttWi33JRw2ZrDRUtd8w+aT67SfCUcuY61so2IRVw9RkCQm1Z8eg7H7xDUmWQuSIKYRVnl7ortKjqtPDmh9gA==","signatures":[{"sig":"MEQCIGeWKfSvJAVNS4jniWwfou0u+OjJguoqR8cjvRFbJhkrAiAJDPh+DRLaD9O+IEdkM3O9VsDf164n8N96UJhlNBzhCg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":953938,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbP9u3CRA9TVsSAnZWagAA4y0P/j8b0Lv8MmWXMN/SZs04\n1tpsdzYddNMj7PC9Idb4RQuA+E+TTSLR2F+QDkkZwqMVqvILerI20Xmk2X89\ndr5HbEZKvSUyXqChiX7bzDI83T5qwI9o2PvzzqZUvJWinhZ/DhlFM1QOpg0k\nfk8tBE06BIFd3ExRwIX4uno135hNCq58GFa1FJ9+ucpyuk20vs1pvha3O9Ue\nrAB0RWVYiKmH8Ual2pGZNNoLInlKBsPYERCcF602YL/MV6mo8YOz367Hviml\nJpxIgqpOGHQ+tju5PWbJnhaGPIC8Th1LzsokPQxqVfs0a4ra55VhXdRo040S\njb0MDXhsC6SEvn6CbutsXt8eLs/raamv7ZUhHdwuDFKjV5+gOD1GrK8x5vk8\nHXtoBtRhv/P9gxwSLVwfl0N9hKKUqf99HsPg86QJqD0GgQPRkP8X9fJ7BE8m\nN6RI7vA/1l2BTgI9SIGGhbKDzIdArzsbApoWmYdOgj6CXsSgBR27iSkvd+Nw\n9fBNZ34xBjGHfUB/AW1aECEsIZ+bvr6WZ9ZUjFnp6AYD+ou8OxmmG4Q50xzs\nUlByQrjFAIu6TkDpgcCrUmFhV+KomRPSq9FQF7qBBskdVjaPAXfFrXHO0bF/\nj8RWwgGORUOV+XixdmVZUG1duP7UHYUfmdQTwY0u3di6ow7GyJlZzzjykVEU\nODB9\r\n=vR6n\r\n-----END PGP SIGNATURE-----\r\n"},"main":"main.js","browser":{"./lib/node/font.js":"./lib/browser/font.js","./lib/node/load.js":"./lib/browser/load.js","./lib/node/write.js":"./lib/browser/write.js","./lib/node/create.js":"./lib/browser/create.js"},"gitHead":"144291c7ba4b155661a3ed28dee61f97ce9f0a68","scripts":{"browserify":"browserify browser.js > canvas-plus.js"},"_npmUser":{"name":"jhuckaby","email":"jhuckaby@gmail.com"},"repository":{"url":"git+https://github.com/jhuckaby/canvas-plus.git","type":"git"},"_npmVersion":"6.1.0","description":"A universal library for manipulating images, built on canvas.","directories":{},"_nodeVersion":"10.5.0","dependencies":{"canvas":"1.6.10","crc-32":"1.0.2","omggif":"1.0.8","exif-js":"2.2.1","image-q":"1.1.1","pixl-perf":"^1.0.0","image-size":"0.6.0","pixl-class":"^1.0.0","pixl-tools":"^1.0.0","pixl-request":"^1.0.0","blob-to-buffer":"1.2.6"},"_hasShrinkwrap":false,"devDependencies":{"browser-process-hrtime":"0.1.2"},"_npmOperationalInternal":{"tmp":"tmp/pixl-canvas-plus_1.0.2_1530911671722_0.8743666785678554","host":"s3://npm-registry-packages"}},"2.0.0":{"name":"pixl-canvas-plus","version":"2.0.0","keywords":["image","canvas","rgba"],"author":{"name":"Joseph Huckaby","email":"jhuckaby@gmail.com"},"license":"MIT","_id":"pixl-canvas-plus@2.0.0","maintainers":[{"name":"jhuckaby","email":"jhuckaby@gmail.com"}],"homepage":"https://github.com/jhuckaby/canvas-plus","bugs":{"url":"https://github.com/jhuckaby/canvas-plus/issues"},"dist":{"shasum":"8956529df890c2da1c208a645ade9d45242c85a1","tarball":"https://registry.npmjs.org/pixl-canvas-plus/-/pixl-canvas-plus-2.0.0.tgz","fileCount":33,"integrity":"sha512-UnShp6pjzJ3Q5eQAuuRTeBZDMHXwQn2KUKRuY9OvMp/EpZtLx+KkJTChMpYDP+F4Wkecf5/Cm2KDFDoUcJJ/rA==","signatures":[{"sig":"MEUCIQDCISI3zbWoAoeBhErTVkmYt137AbVticxbhc0/haL60gIgVJODi0qNBd1/idahA+XyQpUVan2he4a3vIuFcs3Zdog=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":954011,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcRU5GCRA9TVsSAnZWagAAzWkQAI2M2FEDNDFZfMknR+hP\nqRpDZyrQyjFH3xUVMbb+EuGtPC6z8/6RW6GhgdKj8+IMKE87Uzr+Jkf2GwOD\nt7X/KIUN6LxMhNEaISe3CouG3DZZloA5LjN/Fsb5CzEq44xgUKl8XMzQWGGo\nizg1650xKJbHzjrm6gvcpC0UqiAZZRaerIOOdxowtF5fNdr6JoLfNw8iiscy\nj1SiCXOkjPW7E2raQodcpG8FuR2Co2Uz8cGyRazbMt8qP4I0SOHk/On7CgSF\nwLHQg+KiElJe5T0knltUnpBHTnlZ4xW0SiPl3ZLkqLgvFIK8jU7n1pD8PvNH\nxYS1un39KIklsWu0bGYW8Uqa7fsxTlHNJeeMRzTvb5+9b+oBXKxmPVZjLvC1\nruu1BYOl2gnJh2zxJ6EK73oz7wIUHvNbsdZFdtjrOuYfhsjdojjtCdrgpUON\nd245nVn/NYIoAd7RIxEIOEYrklNV6DPvtIyftqMBMjr03NfldsdNr9UQ7vrM\nCvMCPTstk9TRUftRggxGisKnPCI4QIlGFnnY39igk5cHrqc38GUcHqAa6fwJ\nBZf6dbofdvz9h4mI/FbDTrOOsBph+Hir9GftOqp1ugBpQRSI0llWXeSRkmrH\nBSydMAzJwTEdmI8mB2DpA/QvHNqcsAoLacV5alRc2BZGIje36cTzBRIXOb7m\nf8T2\r\n=qgZk\r\n-----END PGP SIGNATURE-----\r\n"},"main":"main.js","browser":{"./lib/node/font.js":"./lib/browser/font.js","./lib/node/load.js":"./lib/browser/load.js","./lib/node/write.js":"./lib/browser/write.js","./lib/node/create.js":"./lib/browser/create.js"},"gitHead":"6a629066f48ef09b275bee18b7abf9ac8229d37f","scripts":{"browserify":"browserify browser.js > canvas-plus.js"},"_npmUser":{"name":"jhuckaby","email":"jhuckaby@gmail.com"},"repository":{"url":"git+https://github.com/jhuckaby/canvas-plus.git","type":"git"},"_npmVersion":"6.4.1","description":"A universal library for manipulating images, built on canvas.","directories":{},"_nodeVersion":"10.14.1","dependencies":{"canvas":"2.3.1","crc-32":"1.0.2","omggif":"1.0.8","exif-js":"2.2.1","image-q":"1.1.1","pixl-perf":"^1.0.0","image-size":"0.6.0","pixl-class":"^1.0.0","pixl-tools":"^1.0.0","pixl-request":"^1.0.0","blob-to-buffer":"1.2.6"},"_hasShrinkwrap":false,"devDependencies":{"browser-process-hrtime":"0.1.2"},"_npmOperationalInternal":{"tmp":"tmp/pixl-canvas-plus_2.0.0_1548045893384_0.6127974402829974","host":"s3://npm-registry-packages"}},"2.0.1":{"name":"pixl-canvas-plus","version":"2.0.1","keywords":["image","canvas","rgba"],"author":{"name":"Joseph Huckaby","email":"jhuckaby@gmail.com"},"license":"MIT","_id":"pixl-canvas-plus@2.0.1","maintainers":[{"name":"jhuckaby","email":"jhuckaby@gmail.com"}],"homepage":"https://github.com/jhuckaby/canvas-plus","bugs":{"url":"https://github.com/jhuckaby/canvas-plus/issues"},"dist":{"shasum":"930d87eb027a234a81ec82f3620ac6b998a9db9c","tarball":"https://registry.npmjs.org/pixl-canvas-plus/-/pixl-canvas-plus-2.0.1.tgz","fileCount":33,"integrity":"sha512-fzJHDCkbRADimQ9/vfVJ66cG/x8tU3pUh9YlAEeC+hcB/AHNksOZHAXb6a//KSFnb3jsynqkYqp8DQKdbcCvLQ==","signatures":[{"sig":"MEYCIQC9mWiEGCyNEQC4fkvhjD97zSpt/M4I4+ny720Hugo/tgIhAK/V6DleJdndlzgx9/P+CivT0gFitxO83KfZsXYkbSjG","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":955581,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcSAHyCRA9TVsSAnZWagAAoL4P/jwAXNDl54PeFehaZxjd\nVe3xCP1sTNwnMda33EdzOnGWFpq0A6wZKH+Ceo7qAGD0+oFkmL4xr/JR1zzT\nq8iraynbDakl1RIl8qPSiVLFaZE/Jh8upuBzxeLQepUe2Zg+M7uaW1NZ0i6e\nWIxfqZdmCRR24Qe/jcKsy6YV+6hl7VAcOKucadxT425HbTUYeI14jfkrj2kd\njIchHco+NRAvV9tsNwbUCf4NPbJ+HcZnvLKkQijGvQ+l6/laCPlInntqFDkP\nOwb0M12bU7BftF4JzERq6dAFUjLf40bJtskAsZGClZ+Rpja0LfEZ5tRf6h+s\nweYo2Q1Z5hZuLa4ncdbJOMOqEFv9xuQLaCWI8lxaDfFS8ShrZIkZGqQ/lMat\nnkbKr30sTjwe53GWGmeZRbr49SziwVYSu231NOrOvQiSUuhhKkdlfHZALxle\nqdeJ+S8XJo392mF/LKRCKM9lOtsN7QWrK5LXVwtO1PHPlpcssd1CNG53/EiH\nCcHbv+MhWmOpZfev3G37MmFl0cbIhxFUGWjTkHCSFLTmyjW6qliM3e4lPGrK\n8KOxuNqkUr/dmPdnfXtci83XUgSLg8L5P3CqiklWPSEC/lhw1huZyHAG/wKr\nDM/KQ+YbUKWJtjwMYyu6u7zr9RGo5UjMx1NTLW6GJ51+kkWH/3K6UZ8KH3Ko\nUfT2\r\n=HZu3\r\n-----END PGP SIGNATURE-----\r\n"},"main":"main.js","browser":{"./lib/node/font.js":"./lib/browser/font.js","./lib/node/load.js":"./lib/browser/load.js","./lib/node/write.js":"./lib/browser/write.js","./lib/node/create.js":"./lib/browser/create.js"},"gitHead":"5d76cd9525d36483281a6ae0c386990e6ab12ef9","scripts":{"browserify":"browserify browser.js > canvas-plus.js"},"_npmUser":{"name":"jhuckaby","email":"jhuckaby@gmail.com"},"repository":{"url":"git+https://github.com/jhuckaby/canvas-plus.git","type":"git"},"_npmVersion":"6.4.1","description":"A universal library for manipulating images, built on canvas.","directories":{},"_nodeVersion":"10.14.1","dependencies":{"canvas":"2.3.1","crc-32":"1.0.2","omggif":"1.0.8","exif-js":"2.2.1","image-q":"1.1.1","pixl-perf":"^1.0.0","image-size":"0.6.0","pixl-class":"^1.0.0","pixl-tools":"^1.0.0","pixl-request":"^1.0.0","blob-to-buffer":"1.2.6"},"_hasShrinkwrap":false,"devDependencies":{"browser-process-hrtime":"0.1.2"},"_npmOperationalInternal":{"tmp":"tmp/pixl-canvas-plus_2.0.1_1548222961385_0.3947780044349416","host":"s3://npm-registry-packages"}},"2.0.4":{"name":"pixl-canvas-plus","version":"2.0.4","keywords":["image","canvas","rgba"],"author":{"name":"Joseph Huckaby","email":"jhuckaby@gmail.com"},"license":"MIT","_id":"pixl-canvas-plus@2.0.4","maintainers":[{"name":"jhuckaby","email":"jhuckaby@gmail.com"}],"homepage":"https://github.com/jhuckaby/canvas-plus","bugs":{"url":"https://github.com/jhuckaby/canvas-plus/issues"},"dist":{"shasum":"d0820b0478265f2a2a99e0e99466b7549785e08c","tarball":"https://registry.npmjs.org/pixl-canvas-plus/-/pixl-canvas-plus-2.0.4.tgz","fileCount":33,"integrity":"sha512-FkZw/ZPFV6PpCNorrXAPaj1CQMUGbZq9GBRn/BKF+J/NdhhqGRWbsbyhRdP1xfQXsIA8CO2KjFkg+eW8nyml3Q==","signatures":[{"sig":"MEQCIAYCJwRGSA+qoG+IE587SnvW+27QzyuSVzpVDGsxcW1MAiBiL1en31y5nWzdwfLvQzvKbxIVxiKkWnDYDivqmpTK7A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":960637,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJczRKACRA9TVsSAnZWagAA/dYP/1L26kKKnEpgH2PylFWF\n+QK86llhJjuqWlIJBYIzQBPYc/XmetlloXlvIWmET6qo8yr0ge9Yq98qQpyL\nt21N2K8njxHxSaMfqBnLlrPhmNeyvssvwWn01jGejpuMtmrDJPBdoVPUeyaK\nYWi90SfsN6SE5zL/tlc9glLAZGMMG8+v/mY3IwVYZ45tO4NpF6zkssVuIBTU\n3uHuw5fgQJ8JFx9bdhD/kwXnDNmy+VdNpq1SGQIqmbv3hS7G5tXKaI/6PE/d\nRMkOnw7amJTq/k6PHurVljdYs8SbWsRRPaAXVVT8CGsD8F+/MioNwtjLo7JV\nTuc5BfC7mzy/UQq9giIKROmLw2lW88GrpcH/APmm3I1lUpUQcd4c9+osde3i\nH63ujN08chxGsFzcZsVG1ZgUIkVWww9NinmjyRyofRmb0uN3ktybNLztsOML\nFVHpt2muq4anYkrn7yAeRuP7yekUwGa+C8L/TQaRcpRHw/e879qRemR+5Xyv\nIzkpGCrt2HADVhuQ+ZhQpaxDuMfeoHB/zo6/4t1j/KdFXbfx0n/eq0iD0mlH\nnUnkV1bOuwzlSYg1PySxleYxjxuE5v0bvpJFEodU7GLI9YJ2vo2G3PZqTMaf\nnN3+5lREVeXUnTwUqp78ZaX00HBs+ejh4ynNZYIlg1pbekG1DtcK5NrUac3X\npjt9\r\n=Krq1\r\n-----END PGP SIGNATURE-----\r\n"},"main":"main.js","browser":{"./lib/node/font.js":"./lib/browser/font.js","./lib/node/load.js":"./lib/browser/load.js","./lib/node/write.js":"./lib/browser/write.js","./lib/node/create.js":"./lib/browser/create.js"},"gitHead":"bf1464600cefe2767e34bde7cc00867ab24a9d88","scripts":{"browserify":"browserify browser.js > canvas-plus.js"},"_npmUser":{"name":"jhuckaby","email":"jhuckaby@gmail.com"},"repository":{"url":"git+https://github.com/jhuckaby/canvas-plus.git","type":"git"},"_npmVersion":"6.4.1","description":"A universal library for manipulating images, built on canvas.","directories":{},"_nodeVersion":"10.14.1","dependencies":{"canvas":"2.3.1","crc-32":"1.0.2","omggif":"1.0.8","exif-js":"2.2.1","image-q":"1.1.1","pixl-perf":"^1.0.0","image-size":"0.6.0","pixl-class":"^1.0.0","pixl-tools":"^1.0.0","pixl-request":"^1.0.0","blob-polyfill":"4.0.20190430","blob-to-buffer":"1.2.6"},"_hasShrinkwrap":false,"devDependencies":{"browser-process-hrtime":"0.1.2"},"_npmOperationalInternal":{"tmp":"tmp/pixl-canvas-plus_2.0.4_1556943487758_0.8256145070864638","host":"s3://npm-registry-packages"}},"2.0.6":{"name":"pixl-canvas-plus","version":"2.0.6","keywords":["image","canvas","rgba"],"author":{"name":"Joseph Huckaby","email":"jhuckaby@gmail.com"},"license":"MIT","_id":"pixl-canvas-plus@2.0.6","maintainers":[{"name":"jhuckaby","email":"jhuckaby@gmail.com"}],"homepage":"https://github.com/jhuckaby/canvas-plus","bugs":{"url":"https://github.com/jhuckaby/canvas-plus/issues"},"dist":{"shasum":"d4e120cfaed7605c91072965a12381adf6b0a65a","tarball":"https://registry.npmjs.org/pixl-canvas-plus/-/pixl-canvas-plus-2.0.6.tgz","fileCount":33,"integrity":"sha512-U/dhALcgY+QLluZ/YGNGUnPD0gnkWijMiL4o2Zact1OuMy8eAV3KSTQJWj+fSoJB6B6ltFYR5opJSDj6eALDKQ==","signatures":[{"sig":"MEUCIQCplPXAWvR4MlOTTgX8EVZhpp9eK4+noSEOgnz4PKIf0QIgCfylkS/uiXzSw+fTKt5xyNYe+x4NATSWlYN46q1ERkQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":984506,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZJ97CRA9TVsSAnZWagAAHDsQAJHRzmvCDdm1X0GEaUyr\nzoHX+ZDOwVSTcOlcFIZRv6Z1iSXF4Dj+D4SCX4eDRix8/N3z8xk8k+NAVAYk\nVtUpj9FJl4PnVt+Fc2XUWeQCgbpyelZ0tXELdm7fDo4gmV/Z6a0B6rUnaQFh\nEMTMQZGxRULu5yHBQelyLBrtyrC40xQHxyUAPwh138RZaXRWpArGbv2lbolu\n7HwgcIvxB8N2RH3MuyU77ySF9twKScYJKl74Y1QkPNacIJA/yqiuW0FjSF0x\nVb8N1gMDDLKKbachfWCkW8S8T3f7ipWAj84tiweodhPElPRCOaxWOyJlEqHx\nOhveYL+6zo2GwREY30b7tISd517xaKAx40Op8LXcydDXkGwp14hwkDhN6tFI\nOTsbNmgDDCy9tFOYCowHxwntWy86L4DF7bDmQHssfDwFmU5wBO8Dp6EsuOFr\nphVujyc71Afn++Ps+Y3KKu0t0MvAS9DOg5hI8h9TXbhgQcpxjuNIZabx8zCQ\nvVVoG0K1R6M9cnbbjQ91DqhRQH/6zIDg5jDjfZ8cVFI7eTwt2N7zFxZiqS32\nBDTGozV5ScdYO07X5FKzsfLFLRFRwqghAKhyt1g8P04IPtd7vJQqUgJyfRST\nPApTyX7sqSXVHVZgjDBJPnKxtPldzm++y3Y3wARoY6+cbzdhEcgUT9Rtniur\nZy9E\r\n=dXPK\r\n-----END PGP SIGNATURE-----\r\n"},"main":"main.js","browser":{"./lib/node/font.js":"./lib/browser/font.js","./lib/node/load.js":"./lib/browser/load.js","./lib/node/write.js":"./lib/browser/write.js","./lib/node/create.js":"./lib/browser/create.js"},"gitHead":"de03a615c87b8909a50066600b4777d2689bb08a","scripts":{"browserify":"browserify browser.js > canvas-plus.js"},"_npmUser":{"name":"jhuckaby","email":"jhuckaby@gmail.com"},"repository":{"url":"git+https://github.com/jhuckaby/canvas-plus.git","type":"git"},"_npmVersion":"6.10.2","description":"A universal library for manipulating images, built on canvas.","directories":{},"_nodeVersion":"12.9.1","dependencies":{"canvas":"2.6.0","crc-32":"1.0.2","omggif":"1.0.8","exif-js":"2.2.1","image-q":"1.1.1","file-type":"11.0.0","pixl-perf":"^1.0.0","image-size":"0.6.0","pixl-class":"^1.0.0","pixl-tools":"^1.0.0","pixl-request":"^1.0.0","blob-polyfill":"4.0.20190430","blob-to-buffer":"1.2.6"},"_hasShrinkwrap":false,"devDependencies":{"browser-process-hrtime":"0.1.2"},"_npmOperationalInternal":{"tmp":"tmp/pixl-canvas-plus_2.0.6_1566875513820_0.21145695634851314","host":"s3://npm-registry-packages"}},"2.0.7":{"name":"pixl-canvas-plus","version":"2.0.7","keywords":["image","canvas","rgba"],"author":{"name":"Joseph Huckaby","email":"jhuckaby@gmail.com"},"license":"MIT","_id":"pixl-canvas-plus@2.0.7","maintainers":[{"name":"jhuckaby","email":"jhuckaby@gmail.com"}],"homepage":"https://github.com/jhuckaby/canvas-plus","bugs":{"url":"https://github.com/jhuckaby/canvas-plus/issues"},"dist":{"shasum":"10c879054d68a0b903dcb6d06ce4ee08ed89ed85","tarball":"https://registry.npmjs.org/pixl-canvas-plus/-/pixl-canvas-plus-2.0.7.tgz","fileCount":35,"integrity":"sha512-Vi871+0B1hu8bcyBLxVcnQCDmq6yDcpmz3zOmJE90qruz+SJgThlbF2ocyTj+owxfeQefbrkaU1u9PcuvHozVA==","signatures":[{"sig":"MEUCIQCvY8YTo2RE9O8FBI2Ch5vuI75qoka2K6nct/W3IIqrGgIgciBDT3qU5RBcUPNpP0YCXcHKR+fndzy4Jp1EfTGgXLs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1034312,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJewFsWCRA9TVsSAnZWagAAX2EQAJBYeDsyssI7JDC93dKc\nB1mZbs/ihKcjSyADsQqhM6Zjv71a4N9G3WU8VCCr3q1XNmehqZii0nxVXWTf\nRjzNUm4veGwiCxtTdZw6ZEA8kHlwIY7ig+xJVJmjhy3eVkvn6ERSRH8jUfQS\nmNG4qaaydvl2/msRuWoLeCH8sXWUj3zKpMKOKzlLiRJcoft9DVylScF/laRm\nozlcVen6UVBVMvXoJM3s1oOE1DEf0c1xePJ0QzQ7s4uMeESi3A6mpdR7PmBg\nF46b7AinXGL/dZMJppGkK/Sr3tUkwR+endyJBoTQMen5YZPwqWpybaCYh1kI\nYc2F4KfOByVdVTa1+O/T6qMV8ocdt4IfSYNjywgrstkprdsLz+Ek4oknthmH\n2Vxn3Wvw+E6KYsdyfJ/hxkIkCITTbh/9LVofq36zjrIfZW8kv6k49yvgkYEh\n5Np87c5ZFaAUz8L3T1EzbYMFGFkTdOqqSe+hfopdix/H6acYonjvFNhvG67x\n9RvYD9UWMig1xUTljH+YT/FzOrKTreOfK9AlQlhaj3nD1lt1GiXzTHcN9wgH\n77KDFWJqZS5aixHZwUNRfCS+pgDkXmwCWSxDrXsYNE1k5o2RDMajQvBoA3CC\n8XAMCmKqkgMJN2+LRP1h164ImDwv0pBHyGya8IcTLFq74B5o0w6uSbbmMOHR\nSGj2\r\n=ICXu\r\n-----END PGP SIGNATURE-----\r\n"},"main":"main.js","browser":{"./lib/node/font.js":"./lib/browser/font.js","./lib/node/load.js":"./lib/browser/load.js","./lib/node/write.js":"./lib/browser/write.js","./lib/node/create.js":"./lib/browser/create.js"},"gitHead":"1333e3829f3bfa7d651748456bb2cb7599d5595e","scripts":{"browserify":"browserify browser.js > canvas-plus.js"},"_npmUser":{"name":"jhuckaby","email":"jhuckaby@gmail.com"},"repository":{"url":"git+https://github.com/jhuckaby/canvas-plus.git","type":"git"},"_npmVersion":"6.12.1","description":"A universal library for manipulating images, built on canvas.","directories":{},"_nodeVersion":"12.13.1","dependencies":{"canvas":"2.6.0","crc-32":"1.0.2","omggif":"1.0.8","exif-js":"2.2.1","image-q":"1.1.1","pixl-cli":"^1.0.0","file-type":"11.0.0","pixl-perf":"^1.0.0","image-size":"0.6.0","pixl-class":"^1.0.0","pixl-tools":"^1.0.0","pixl-request":"^1.0.0","blob-polyfill":"4.0.20190430","blob-to-buffer":"1.2.6"},"_hasShrinkwrap":false,"devDependencies":{"browserify":"16.5.1","browser-process-hrtime":"0.1.2"},"_npmOperationalInternal":{"tmp":"tmp/pixl-canvas-plus_2.0.7_1589664533383_0.5794700075436254","host":"s3://npm-registry-packages"}},"2.0.8":{"name":"pixl-canvas-plus","version":"2.0.8","keywords":["image","canvas","rgba"],"author":{"name":"Joseph Huckaby","email":"jhuckaby@gmail.com"},"license":"MIT","_id":"pixl-canvas-plus@2.0.8","maintainers":[{"name":"jhuckaby","email":"jhuckaby@gmail.com"}],"homepage":"https://github.com/jhuckaby/canvas-plus","bugs":{"url":"https://github.com/jhuckaby/canvas-plus/issues"},"bin":{"pixl-canvas-plus":"cli.js"},"dist":{"shasum":"7583e4c18f03a23fca9af4622ab30d2d18b41505","tarball":"https://registry.npmjs.org/pixl-canvas-plus/-/pixl-canvas-plus-2.0.8.tgz","fileCount":35,"integrity":"sha512-UnVCe6poLd4mXqcgqROPoQJEj2JI3HXyZUy7bLCGrMlCP4Fk9qYfGW9nHKWGp7A3Fy28OK47Pm12GuSB9z8czg==","signatures":[{"sig":"MEUCIQDD8PZ7L0Da/Nc0rDUOc9gVyUQ9PxwGXw/KU/KelCBpEgIgex3fCWHwWV76WD0a5EqG6KcpTV+BHg7zG+S0o903f94=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1034370,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvJCGCRA9TVsSAnZWagAAB+EP/j+bUSWf2CQR26wu5Ej+\nFDeoGZzI6T3MTX5Pr+2/K27dyzaL7/m/w8DFJFH2CNLDQ1NKuYTc0Y+yIU6p\nY653U7DvyvEKISF8QjT/bLNd6KuZHXSfSA7JmqHQYL/KzBjpBqvFzSRDO/Uu\n0gWfGJTc1AQxGjXiLpEIyle7C3tbHGxw55e4t0yOQWu/kudqsCI2E3gSXRY0\nXy9GOd8VBsYnsXFhN63wr0MbYFHEHzghB21c2U4xfEi2SlGyZcCfTgzgBi6x\njC/jspnSraL2rVrwbDhB4IVYOQyGMSeXFxxNtNQ88jvNgmM6+wZ69B3K0Vpn\neYm0uxXR3IAGZyIuS4R5ZJnBopYkBDSplzU5OTwxT49/3NDhBub75xIZOKwt\njpplZ26PwKN0FArzjZqBf7YCIYt6TQwmLMhAUyPDWIkn9QRs0GiRLS0E3Myt\nJsc6OLZkAUJIP9DYjaZUqfum4rjzDDvs0no12Vz4qtvqPcRliraSt+Q3YjOp\njzptQnY1xJr9JvEN1uVuJ1Dci/3ScQ4nOteJNQh+68VrAzPVdwopaA1D9aQj\nWSekGkyFQWq9bMkZytK8sp78IYuF0AXl0IU+x9ixsd3mhSIjhiHrIGxST6db\n2onERFGLQyMrx6UHtW/+5lxs63EW0KY1NXJzIFCvGwpSDPuerIJw2d84Xf90\nOCfY\r\n=cEB8\r\n-----END PGP SIGNATURE-----\r\n"},"main":"main.js","browser":{"./lib/node/font.js":"./lib/browser/font.js","./lib/node/load.js":"./lib/browser/load.js","./lib/node/write.js":"./lib/browser/write.js","./lib/node/create.js":"./lib/browser/create.js"},"gitHead":"a40eb289e9e1978df376bb645cdb14d49ac5232c","scripts":{"browserify":"browserify browser.js > canvas-plus.js"},"_npmUser":{"name":"jhuckaby","email":"jhuckaby@gmail.com"},"repository":{"url":"git+https://github.com/jhuckaby/canvas-plus.git","type":"git"},"_npmVersion":"6.14.8","description":"A universal library for manipulating images, built on canvas.","directories":{},"_nodeVersion":"14.15.1","dependencies":{"canvas":"2.6.1","crc-32":"1.0.2","omggif":"1.0.8","exif-js":"2.2.1","image-q":"1.1.1","pixl-cli":"^1.0.0","file-type":"11.0.0","pixl-perf":"^1.0.0","image-size":"0.6.0","pixl-class":"^1.0.0","pixl-tools":"^1.0.0","pixl-request":"^1.0.0","blob-polyfill":"4.0.20190430","blob-to-buffer":"1.2.6"},"_hasShrinkwrap":false,"devDependencies":{"browserify":"16.5.1","browser-process-hrtime":"0.1.2"},"_npmOperationalInternal":{"tmp":"tmp/pixl-canvas-plus_2.0.8_1606193285295_0.2665055884022438","host":"s3://npm-registry-packages"}},"2.0.9":{"name":"pixl-canvas-plus","version":"2.0.9","keywords":["image","canvas","rgba"],"author":{"name":"Joseph Huckaby","email":"jhuckaby@gmail.com"},"license":"MIT","_id":"pixl-canvas-plus@2.0.9","maintainers":[{"name":"jhuckaby","email":"jhuckaby@gmail.com"}],"homepage":"https://github.com/jhuckaby/canvas-plus","bugs":{"url":"https://github.com/jhuckaby/canvas-plus/issues"},"bin":{"pixl-canvas-plus":"cli.js"},"dist":{"shasum":"050571ec80f4bc3e5f0c0b089049be5a937403f5","tarball":"https://registry.npmjs.org/pixl-canvas-plus/-/pixl-canvas-plus-2.0.9.tgz","fileCount":35,"integrity":"sha512-TTqdV1Rr8NpkRAUoGcoTfgU35cJFRMM+pGo7x2SDdd0rz3V6l2ENh9jR/8/Lg87OuM2XD8Tz0XolbEsYpvcrqw==","signatures":[{"sig":"MEUCIQCrImateSduhNiZByDmHKHyGuG3K6v5dEonivSJEJh1XwIgBo732xCPPUAXtU3wnbrFEZV1xB26jrPIv4f1exXd3Ww=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1035233,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGzweCRA9TVsSAnZWagAA0fIQAJuCtuuB4NnKmBz7u1Ka\naGsx/f/nBmI+fetDQKVFNDL0YvQXqyDR7uE9D7KRZI7EG9HtmWcCiUFJDB4U\nhpvRaPcre2zCcgFwCZKbFuGuZjgmukZR779tp5ETiGXB9yt+4hSXIlwjeH9y\nOlArt3Y+7n3TMYKrehJEsU043NLBLSBAETIJTk5EZs5AF104XLFwCS5dDwvT\nndnVwCzcvKZGChVwvoHnceZM2mqbOd1avLMuDr1Qga9SExVJqiUcetT7Wf4i\nPEZiY1fTmgmSBDaTcaaQqtUNiEayBPW70/HOG9jnqB7xukCqInxbv7EQrwoa\nHrP6Nb/Ol2gsBcZFb/io2CvD/JjKAKI8pvCjSRH/t406gPP/mVGUjxNdxnod\nClwrKXqa0AC1m23VlHUkZoGXpxvlSN/5IIci+Jbvy2F5y2fnpY0dL/rb/JBk\n/c7T6M4C/ufftldbvJpqFyCFxRxv8VWCgZzeO3xJ6JgVSh9FumwiM6gSqlhS\ntSaLKAlmSaQ9zOhm1ZBS7T2GllcYNRSke5rOUO5fDX5VdZSuTwCWXOMJmGdU\nSTTrwVwBM2uIYZ8tRQoMGhhKiiuiBY5CCIwuWHq6VEkEzXXFYQ++deIqzDxL\nlp/m9i4A3XXLCxbo388dHS4ntfSH/bvVJhhQPduheMyhvn7xnWFf03O3+ewW\nMMhk\r\n=Q2Ya\r\n-----END PGP SIGNATURE-----\r\n"},"main":"main.js","browser":{"./lib/node/font.js":"./lib/browser/font.js","./lib/node/load.js":"./lib/browser/load.js","./lib/node/write.js":"./lib/browser/write.js","./lib/node/create.js":"./lib/browser/create.js"},"gitHead":"fe9ead18025bada4c1a0cc3b64ecc8655186f5c1","scripts":{"browserify":"browserify browser.js > canvas-plus.js"},"_npmUser":{"name":"jhuckaby","email":"jhuckaby@gmail.com"},"repository":{"url":"git+https://github.com/jhuckaby/canvas-plus.git","type":"git"},"_npmVersion":"6.14.8","description":"A universal library for manipulating images, built on canvas.","directories":{},"_nodeVersion":"14.15.1","dependencies":{"canvas":"2.6.1","crc-32":"1.0.2","omggif":"1.0.8","exif-js":"2.2.1","image-q":"1.1.1","pixl-cli":"^1.0.0","file-type":"11.0.0","pixl-perf":"^1.0.0","image-size":"0.6.0","pixl-class":"^1.0.0","pixl-tools":"^1.0.0","pixl-request":"^1.0.0","blob-polyfill":"4.0.20190430","blob-to-buffer":"1.2.6"},"_hasShrinkwrap":false,"devDependencies":{"browserify":"16.5.1","browser-process-hrtime":"0.1.2"},"_npmOperationalInternal":{"tmp":"tmp/pixl-canvas-plus_2.0.9_1612397597863_0.7387578950170539","host":"s3://npm-registry-packages"}},"2.0.10":{"name":"pixl-canvas-plus","version":"2.0.10","keywords":["image","canvas","rgba"],"author":{"name":"Joseph Huckaby","email":"jhuckaby@gmail.com"},"license":"MIT","_id":"pixl-canvas-plus@2.0.10","maintainers":[{"name":"jhuckaby","email":"jhuckaby@gmail.com"}],"homepage":"https://github.com/jhuckaby/canvas-plus","bugs":{"url":"https://github.com/jhuckaby/canvas-plus/issues"},"bin":{"pixl-canvas-plus":"cli.js"},"dist":{"shasum":"0246c4a5872c80dc10287b98dd5e91eccd2e5fd6","tarball":"https://registry.npmjs.org/pixl-canvas-plus/-/pixl-canvas-plus-2.0.10.tgz","fileCount":35,"integrity":"sha512-APAu8R7uo1QY8sPXaEZ9KTA5b8LVbBrYxJTtT6bJtx1c5bHRWAbTtQ7jnLyyJd5j/xPQmRMALyyn4FPiQ/9IWw==","signatures":[{"sig":"MEUCID6rJqCIz0Nk661ojxxzhY5lZh76g0zPbyRgTWQxW2MvAiEAyDjH6hSNelnTXc5JcC5x7fUXrxQgl3isj5VsdboA1lY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1035234,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgRUFjCRA9TVsSAnZWagAAtZkP/RVjPF+FPHmhggFaLXbV\nTz6R3IqKgITPcKXifZiCavXQVg2BR2xkbrnvwuRzuxnLuh5Wa39l5ZZEFmMt\nAHFT5SQ4QVVpRPdB5faQ0yU+hs/7+K7I2pqCC3usYE/21yliG9vN92yMafx0\nkTMWE9bBTOwVRpXiJEHedwBvwXc9dCUM1EkglVVofl0fnOlDFvfIxB3VUmrA\nw84USfT4VPh0EAGYlByyamUg5f4V/cvXJMzkXKEJ0/a4H/9X3H5kj+F5kZUm\noFJdKO7vsFSH9sRWiJm/NtVgMns6Mz4fXsF5EgY0mYxcRPIwSqN5blxFAWgw\nm8hWy1LT8LcwlmVyOENQ5JCy+vJ5dJcQLiL7UVwNZ91SBFcp0an6VSw3o9rO\nE2YBbtzKFlIW4QRGKnvuUxwbO7NGuJhNxMe/7MLoGY7RbrM4TuSXt8IBP/7J\ncQ94h2CCj6xA+OXSjtKkVURqhX+H9+lpOOsW3+AyDgeuwhi/I+36Fk/ulm4u\nUq3FJDw1ccLip33Rp4eqA1RUULSrf2CuLAPu56McOJQSi3qpUeUf5FrydmXF\nVzV4Doct51kzSXBu05BdX+im2bkoKkdXjRhW5MI4s6ndhKzJcgOjBdCKeMtu\nWt1lWmWLcNn223R7cbBO7o6oEBSbxzzCfj3Tqn30UHm/3if/Is+JZL6csTyH\nYNFo\r\n=fOK2\r\n-----END PGP SIGNATURE-----\r\n"},"main":"main.js","browser":{"./lib/node/font.js":"./lib/browser/font.js","./lib/node/load.js":"./lib/browser/load.js","./lib/node/write.js":"./lib/browser/write.js","./lib/node/create.js":"./lib/browser/create.js"},"gitHead":"1e678edfaf54e99a2ea46d762e2adf9217ea29e5","scripts":{"browserify":"browserify browser.js > canvas-plus.js"},"_npmUser":{"name":"jhuckaby","email":"jhuckaby@gmail.com"},"repository":{"url":"git+https://github.com/jhuckaby/canvas-plus.git","type":"git"},"_npmVersion":"6.14.8","description":"A universal library for manipulating images, built on canvas.","directories":{},"_nodeVersion":"14.15.1","dependencies":{"canvas":"2.7.0","crc-32":"1.0.2","omggif":"1.0.8","exif-js":"2.2.1","image-q":"1.1.1","pixl-cli":"^1.0.0","file-type":"11.0.0","pixl-perf":"^1.0.0","image-size":"0.6.0","pixl-class":"^1.0.0","pixl-tools":"^1.0.0","pixl-request":"^1.0.0","blob-polyfill":"4.0.20190430","blob-to-buffer":"1.2.6"},"_hasShrinkwrap":false,"devDependencies":{"browserify":"16.5.1","browser-process-hrtime":"0.1.2"},"_npmOperationalInternal":{"tmp":"tmp/pixl-canvas-plus_2.0.10_1615151459031_0.48803525065550013","host":"s3://npm-registry-packages"}},"2.0.11":{"name":"pixl-canvas-plus","version":"2.0.11","keywords":["image","canvas","rgba"],"author":{"name":"Joseph Huckaby","email":"jhuckaby@gmail.com"},"license":"MIT","_id":"pixl-canvas-plus@2.0.11","maintainers":[{"name":"jhuckaby","email":"jhuckaby@gmail.com"}],"homepage":"https://github.com/jhuckaby/canvas-plus","bugs":{"url":"https://github.com/jhuckaby/canvas-plus/issues"},"bin":{"pixl-canvas-plus":"cli.js"},"dist":{"shasum":"fd8aaf156cb96d761c4f509159112eaba3f912fd","tarball":"https://registry.npmjs.org/pixl-canvas-plus/-/pixl-canvas-plus-2.0.11.tgz","fileCount":35,"integrity":"sha512-ColXNFPZcrXTw9uoFHNrhi0mRweQpNNpPyW1dBVdRF8mz18w8CDvquKzYjzv8h9D7GsgTAkG0Ko6JSJl5NxUHw==","signatures":[{"sig":"MEYCIQCYtNfhihVrAXybLfeQV7lx36SwRwvqrvyAE9Rpn1ALcgIhAKiG5kImT50JSvNDa+h7fTZ2vbw8BsJrYdNUXthgkftQ","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1035542,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJglgM4CRA9TVsSAnZWagAAKwgP/j/Vc/aZgCn4n3K0+hx1\nXxOg1DBlWqZtZPY7fQGvDv6uAnFqDlBDOQbJC6pyAT+uQwVbWy0pMSoYk9vL\n+EljfKUnTlFD2R6Cyd/0qVc7EavrW4E8y+IUpuuYKL7lvq3B8ecCd5EmxtB7\nprGAhNVzmlQmTaQuTxsncjP4BwLxLGnokwx0a1wuSCwbbU59H0Sv4C6axdBy\nlByPkj+4Hlu4Xov6DrBIqTgvFrIZ6YUJPqmO/GyzS79cZeXKtJqD6ZL09rOs\n6jKux3KXR1eQ1JwJ6cEWfDpEjNOUx1wT2tfU0gt9LmD5Eo8pQUoK85LDtSbt\nnNYIJSsXxtQ55oaeu1JnXuYQY+mqHAwRdVDRmOxUaJ+nzdYrichESrHpFl3G\nF+aj+IN9kHoyf6fiJlblF+zetKHSpn7Wlqnf4mYb/JZZk1Jy18lhTdihDe0Y\nxJkf4cGv82/xGdlk+m8G9bSd3U0GO4aBBSqxZPXn0JPlOeLG2dXeYW6ykKoJ\n+uQXxMTCh6TRezsBnDQ7BJHaLbjed7CRwpq8/wYo3KTfWl7NSpU7CkAC6kWs\nZy3H7H5E/jebKDI6bTzkzUHfH6dErrLZXC5QWeYX0Vs+6wJLSJAbKwPqFv+L\nGgFLk2i/iOIhlUZbGCcf2XCKZu2eLq8GfIl5Y+RP9WbcwiU889c00EWb8VWz\nE+vp\r\n=bJAG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"main.js","browser":{"./lib/node/font.js":"./lib/browser/font.js","./lib/node/load.js":"./lib/browser/load.js","./lib/node/write.js":"./lib/browser/write.js","./lib/node/create.js":"./lib/browser/create.js"},"gitHead":"713bc74e71f9c3bc20c82ace4e5b68559f3958bf","scripts":{"browserify":"browserify browser.js > canvas-plus.js"},"_npmUser":{"name":"jhuckaby","email":"jhuckaby@gmail.com"},"repository":{"url":"git+https://github.com/jhuckaby/canvas-plus.git","type":"git"},"_npmVersion":"6.14.8","description":"A universal library for manipulating images, built on canvas.","directories":{},"_nodeVersion":"14.15.1","dependencies":{"canvas":"2.7.0","crc-32":"1.0.2","omggif":"1.0.8","exif-js":"2.2.1","image-q":"1.1.1","pixl-cli":"^1.0.0","file-type":"11.0.0","pixl-perf":"^1.0.0","image-size":"0.6.0","pixl-class":"^1.0.0","pixl-tools":"^1.0.0","pixl-request":"^1.0.0","blob-polyfill":"4.0.20190430","blob-to-buffer":"1.2.6"},"_hasShrinkwrap":false,"devDependencies":{"browserify":"16.5.1","browser-process-hrtime":"0.1.2"},"_npmOperationalInternal":{"tmp":"tmp/pixl-canvas-plus_2.0.11_1620443959701_0.6984908144622237","host":"s3://npm-registry-packages"}},"2.0.12":{"name":"pixl-canvas-plus","version":"2.0.12","keywords":["image","canvas","rgba"],"author":{"name":"Joseph Huckaby","email":"jhuckaby@gmail.com"},"license":"MIT","_id":"pixl-canvas-plus@2.0.12","maintainers":[{"name":"jhuckaby","email":"jhuckaby@gmail.com"}],"homepage":"https://github.com/jhuckaby/canvas-plus","bugs":{"url":"https://github.com/jhuckaby/canvas-plus/issues"},"bin":{"pixl-canvas-plus":"cli.js"},"dist":{"shasum":"e68cdc50ddfb3f49538a382e641550802a87d7f8","tarball":"https://registry.npmjs.org/pixl-canvas-plus/-/pixl-canvas-plus-2.0.12.tgz","fileCount":35,"integrity":"sha512-ZCdKJhJ4W2mHiTYJA5SlLQI0P28/64csdytMVFIv0idnXE1biJw7vSPsBvmqpglIAN9FMVvgZ2ULVGNMMqTfCQ==","signatures":[{"sig":"MEUCIFjBO/Vq3+apwAdIT5m7tx5S8qUrq67ufG92ZYyYeTwGAiEAyijQ8fEwbyDqw0PewB4QsXGIzn4aZarHG9t2ckk31IM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1036078,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh+iA6CRA9TVsSAnZWagAA+r8P/ieBUJ8JzfJasrtjnzh+\nbJrIKAanLuSU1YkRWNireMavQMFrv3xvl3FBV0QSzsEDiJ16mG3BNHqAy4rc\nm0Vf3Q0uEOveAj/WEC6mWRM7cbz1GRATowq5dhQbzvM6nN5gkUcV93NTuc1y\ncWlmlSBv5NGK8llXi0hDl9KzQjeWTC4xZ66fNS+4g3Zge0WY+p1g87IiN8Tp\nsYY5rZmJdDtYr7waO6zS5Qkingbp8dJnGtEVg+R3IjwUe6XWlf/Y0H7MoOjg\nvqNbXgT8e9OqVryyw7N+S5ugn++PwHcS53aKUaUzm2fOV+y6wy85rP+D5v+/\no8VEiCQimh7wAUjUya1dR7jht09phZj60TplHJrwy04xNW14LLKP/x/9FF1F\nZMFif7vYYYckamGw+56JevxL4/RB+0vBtRD/lwCX3U+REuyZM7h6oF6lCBf9\nZcQh3RLrZ+Wlh7VWPnrGs/N3AFUXUVHeBqbC0Jz7GbkTIp3hn9c6nJ85WmvS\ne3p0ARMiBPPCOVFSdcAgpewKPASXGCUgZ6hDPyo1SNyuISqyvtEfg6g7wdWD\nAn3kJzMNQqM0MtoETZk0CkLt7iE0yMMR8I4rH18nAaOiI4/O3AI1wMNH2dLe\n59KOMU7SgquzCBro/xMRxPC8gPcOjDdGWxNu5st4VS+5Pkm/nwqLxyk/7ofd\n6cB1\r\n=l7yc\r\n-----END PGP SIGNATURE-----\r\n"},"main":"main.js","browser":{"./lib/node/font.js":"./lib/browser/font.js","./lib/node/load.js":"./lib/browser/load.js","./lib/node/write.js":"./lib/browser/write.js","./lib/node/create.js":"./lib/browser/create.js"},"gitHead":"ece13a603b0e0b4e7bb1f2e5845b87b979bfda7c","scripts":{"browserify":"browserify browser.js > canvas-plus.js"},"_npmUser":{"name":"jhuckaby","email":"jhuckaby@gmail.com"},"repository":{"url":"git+https://github.com/jhuckaby/canvas-plus.git","type":"git"},"_npmVersion":"8.1.0","description":"A universal library for manipulating images, built on canvas.","directories":{},"_nodeVersion":"16.12.0","dependencies":{"canvas":"2.9.0","crc-32":"1.0.2","omggif":"1.0.8","exif-js":"2.2.1","image-q":"1.1.1","pixl-cli":"^1.0.0","file-type":"11.0.0","pixl-perf":"^1.0.0","image-size":"0.6.0","pixl-class":"^1.0.0","pixl-tools":"^1.0.0","pixl-request":"^1.0.0","blob-polyfill":"4.0.20190430","blob-to-buffer":"1.2.6"},"_hasShrinkwrap":false,"devDependencies":{"browserify":"16.5.1","browser-process-hrtime":"0.1.2"},"_npmOperationalInternal":{"tmp":"tmp/pixl-canvas-plus_2.0.12_1643782202194_0.968494287942411","host":"s3://npm-registry-packages"}},"2.0.13":{"name":"pixl-canvas-plus","version":"2.0.13","keywords":["image","canvas","rgba"],"author":{"name":"Joseph Huckaby","email":"jhuckaby@gmail.com"},"license":"MIT","_id":"pixl-canvas-plus@2.0.13","maintainers":[{"name":"jhuckaby","email":"jhuckaby@gmail.com"}],"homepage":"https://github.com/jhuckaby/canvas-plus","bugs":{"url":"https://github.com/jhuckaby/canvas-plus/issues"},"bin":{"pixl-canvas-plus":"cli.js"},"dist":{"shasum":"4dd11be1a4f3aadd906ad10b3aa079050bdf0b9e","tarball":"https://registry.npmjs.org/pixl-canvas-plus/-/pixl-canvas-plus-2.0.13.tgz","fileCount":35,"integrity":"sha512-3oAfIR4GtM7dq6NLPmlkJ7tuUrBjgBEbynx9phS/Ye/t8c6c6CixV+BLHw++gOApLQan1rvNg3uizjkz+Qd14w==","signatures":[{"sig":"MEUCIQC4Gfmwo/1nA8b+TKb7drG6CqGANBmYFaWEVFYfng+cUgIgCPRA8w8C4mNHX26MTSPiSraEfggr/+WzSPCLP2gmEn8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1041118,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh+2TbCRA9TVsSAnZWagAAFxwP/jbOGcWW6wsLJh4wkgPu\nbG11cXA7D9y3cykJcrwxcO/YJpN1TXb1GPQ2mLtq9nTqQjRv2hQxaNuZealj\n7R9UL4ynucyQz4c6tZzhRRzDJstu6bxjvRKbczYRrQsFuuAwak2/Ixtj3qU5\niqal6qeOpABLS/lXOy8pssLS2V8/RD6Jk2H4i+l1hvecFVgHiLGz77/DB8f4\nKJLbpxYupWhgz8XsEGeFPIiIe8RY/sMVwZicSsbfy+4NINQ2Fydd9oSR94nf\nwfyYxZZs+CJzhQiT8Xu2KSHyq3EoPEvYK80WDU10ZJIFqmM4S7n8oCMsI6vm\nNIiChknCj5NSGYwBROcyXSe4EAHYQdgW9jOkaGz7u/fWVGtRJRpwn+BBuVQ9\notuU2rPYVd5yQ9BX02NhVaeip4hnspGiIvVzwogdLl9QC7rTnxgczB9DT9Nt\nVXPCS3tecuULOBm9PKSO0NjjmyTZMg1c7Sx0yug2AAQkpKOAbsXaltK1TIYa\nhd0SSBiy65Bp96BmpzV/G+GafkmoySwh9qKzVOczPp5R0fjknvZ8pHVP1BLX\nkfxISGxcZxZnP2vDW3U0bvNzPtU8SohOsUyp4wlL2RdUFe681dBGtSkbZWWb\nJIy41Cixxn8n/m4yOW+Zc//3aR5IydwPUK4OWy7Ua8PQjxWJUEen+yVUpS7X\nYxEc\r\n=3sin\r\n-----END PGP SIGNATURE-----\r\n"},"main":"main.js","browser":{"./lib/node/font.js":"./lib/browser/font.js","./lib/node/load.js":"./lib/browser/load.js","./lib/node/write.js":"./lib/browser/write.js","./lib/node/create.js":"./lib/browser/create.js"},"gitHead":"199f8caf77083c489533dc3bd52f4bb340da6d20","scripts":{"browserify":"browserify browser.js > canvas-plus.js"},"_npmUser":{"name":"jhuckaby","email":"jhuckaby@gmail.com"},"repository":{"url":"git+https://github.com/jhuckaby/canvas-plus.git","type":"git"},"_npmVersion":"8.1.0","description":"A universal library for manipulating images, built on canvas.","directories":{},"_nodeVersion":"16.12.0","dependencies":{"canvas":"2.9.0","crc-32":"1.0.2","omggif":"1.0.8","exif-js":"2.2.1","image-q":"1.1.1","pixl-cli":"^1.0.0","file-type":"11.0.0","pixl-perf":"^1.0.0","image-size":"0.6.0","pixl-class":"^1.0.0","pixl-tools":"^1.0.0","pixl-request":"^1.0.0","blob-polyfill":"4.0.20190430","blob-to-buffer":"1.2.6"},"_hasShrinkwrap":false,"devDependencies":{"browserify":"16.5.1","browser-process-hrtime":"0.1.2"},"_npmOperationalInternal":{"tmp":"tmp/pixl-canvas-plus_2.0.13_1643865307299_0.4497854319451735","host":"s3://npm-registry-packages"}},"2.0.14":{"name":"pixl-canvas-plus","version":"2.0.14","keywords":["image","canvas","rgba"],"author":{"name":"Joseph Huckaby","email":"jhuckaby@gmail.com"},"license":"MIT","_id":"pixl-canvas-plus@2.0.14","maintainers":[{"name":"jhuckaby","email":"jhuckaby@gmail.com"}],"homepage":"https://github.com/jhuckaby/canvas-plus","bugs":{"url":"https://github.com/jhuckaby/canvas-plus/issues"},"bin":{"pixl-canvas-plus":"cli.js"},"dist":{"shasum":"d7e5835a0e70f630cc5078fccddacc1c8f57a353","tarball":"https://registry.npmjs.org/pixl-canvas-plus/-/pixl-canvas-plus-2.0.14.tgz","fileCount":35,"integrity":"sha512-BaWu4nGbZf79mUbLFYE539OzDDeUwkGGulcKqCEcf1qCj20ZZbMOtBbpXp9SUg5b3us5XA67giD0zM1JDkCfyw==","signatures":[{"sig":"MEYCIQCvK89qFHV55mD/ZW4y05N9QKyfzJBs68H9Dxk3ZDZk0gIhALMFhuaZQEBlpyn/WTPDb6UMxVRnByl2QuAlQbJjC04c","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1041174,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh/2OjCRA9TVsSAnZWagAAztcP/iZPukngKynqp91rPeSu\niBrKJ6OGbr8FFrZczCYT5dhgl7e5iQkbuIQctShO+NEvnszrvO4dxUwBJY9u\nTqWLxygSS4dJsvgL1vmwoiMXdk4KWLWLGbYQUzSRJYO89xGpK6Fw+TS4xDIv\ndgx51trSgEE+hgcUjgUG+476gQKKpPK7da3OlKtYcCMQv2hxwqbE6HX65z0L\ndkBnZRRzwQ7PJd/iCKyMLnDvZSaUnu7xfXtUCpvGoF49SdW79gsSEG2Dkt4e\ntyiVbjg8IJY24TmwMffPtw3bjSzUOjgj9odG4bcYRrCG6Y+E8eFAz+vhYsZ6\nrKpqMD1ECxKeeH8b+QZuewG9FqfuZYKKP2+z5fKWqLGB6pXXOf7qEFDJ8eU1\nEZU94N2RNqdHrt5Dq932NQ6Ei68shq3VzdiG2W2GppR+wt7yHZFBbNakCrHc\nRWWUIpU1YIfvYdMaXVZ+u9Og3iLyCCiAXqUnZH8bpugY7jEBodz1bRc0xUVf\nLXdGTovD9WbrkFgQ6dcKs0/ma887Yo/iRxZ2zqgQJ0m/SXDPLekH2Y3ICDns\n8nb/Dw0dNypJzLzMrzGdJ1coLN4sFts/o3NE66+Y7IUOvqHPpfl+dYi201pT\neaExu/Vgz5V5h3aGqrFQJKjsovIpkN0gIHMt2kGc6WzDdNjwxYcgLmSlET/J\nUGL7\r\n=K5X/\r\n-----END PGP SIGNATURE-----\r\n"},"main":"main.js","browser":{"./lib/node/font.js":"./lib/browser/font.js","./lib/node/load.js":"./lib/browser/load.js","./lib/node/write.js":"./lib/browser/write.js","./lib/node/create.js":"./lib/browser/create.js"},"gitHead":"f8398f844c70c85122778e4967084ce8e7dd13ce","scripts":{"browserify":"browserify browser.js > canvas-plus.js"},"_npmUser":{"name":"jhuckaby","email":"jhuckaby@gmail.com"},"repository":{"url":"git+https://github.com/jhuckaby/canvas-plus.git","type":"git"},"_npmVersion":"8.1.0","description":"A universal library for manipulating images, built on canvas.","directories":{},"_nodeVersion":"16.12.0","dependencies":{"canvas":"2.9.0","crc-32":"1.0.2","omggif":"1.0.8","exif-js":"2.2.1","image-q":"1.1.1","pixl-cli":"^1.0.0","file-type":"11.0.0","pixl-perf":"^1.0.0","image-size":"0.6.0","pixl-class":"^1.0.0","pixl-tools":"^1.0.0","pixl-request":"^1.0.0","blob-polyfill":"4.0.20190430","blob-to-buffer":"1.2.6"},"_hasShrinkwrap":false,"devDependencies":{"browserify":"16.5.1","browser-process-hrtime":"0.1.2"},"_npmOperationalInternal":{"tmp":"tmp/pixl-canvas-plus_2.0.14_1644127139534_0.4460172362688979","host":"s3://npm-registry-packages"}},"2.0.15":{"name":"pixl-canvas-plus","version":"2.0.15","keywords":["image","canvas","rgba"],"author":{"name":"Joseph Huckaby","email":"jhuckaby@gmail.com"},"license":"MIT","_id":"pixl-canvas-plus@2.0.15","maintainers":[{"name":"jhuckaby","email":"jhuckaby@gmail.com"}],"homepage":"https://github.com/jhuckaby/canvas-plus","bugs":{"url":"https://github.com/jhuckaby/canvas-plus/issues"},"bin":{"pixl-canvas-plus":"cli.js"},"dist":{"shasum":"482355f735f5bc0e8c8eac9c69a25b0364751a67","tarball":"https://registry.npmjs.org/pixl-canvas-plus/-/pixl-canvas-plus-2.0.15.tgz","fileCount":35,"integrity":"sha512-vMHls3KeUSsrxjWJkEndOcldHpIkgNCbqQC7OeEv35ZSHS5uzXP+n+ycwye0ujggXKJbPhB8P71vbevl8bU3cg==","signatures":[{"sig":"MEQCIAGt3W+Baj8Oy1/6fvcj3Zo8w9zS2vtbjYvFS/+5ZavnAiAJAt53EEd3UeHT5MERE6sagTGXzFrQjIph0td8m4HQdg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1041172,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiAbPgCRA9TVsSAnZWagAAd/gP/ju5u9Ojt+5WgH+BIOKR\nHecXJOlJBH03+QwqLsW0HBNyV4YISiadlTHGmOYUoD/lVVQNb13/Jkg+jqLh\na3h++x8XLMmz8k3QceiyU648b8AxazQM72i0t0CQcGmmbpOnUtD3olJlH6yU\niARclPzsvib2WJIHptK4a2OcVmZaEMSCpfByThJ5DELJpIfA8bmU8Ayjesz9\nuU+HhzmMs3BOgTkWdk0WiiMq7vLhvtpRsf8NCTV2vrjE26Kzno1FP7P0mh+r\n7yc77rRdbpUXhD4GCrZfllgM7X0hl034qaCzGsp87p5qFz5WwwmSaImjLbyq\nOyFi6twhtnUiMb+M3xKwf4kqJVrRcdyIUFBfTcVXwkB/05+0D5yWVEJKltqa\nAmPSmaBU2gGJKNA7QlKuuY2zxQ0egRtVBqkp+JUgUKM9WCnqYK1Dj7cjDKGM\nMhphpi+JRkBhWXWbiv7rvPbVqXbeQMqt4JsYjvdJwa7RsRymA8h7iJOzwtWF\n0hE4Qd50th+fESSm5ApGJORyFKRcmF/DAeGGgWTbG+aFZe6dAEMFHs4pgQpi\nXnGZSQzqQpNZeyLhz16KWo8sC+WlVdSVtp3dY7OO8nD/9cFyr1fvoRwAwVFu\n442oPd9Naxchhp/GX0ixUt7yqDjykGxUBKYJilKHgN6tsGAnxxA64O8Qyoc/\nZhuf\r\n=4k9J\r\n-----END PGP SIGNATURE-----\r\n"},"main":"main.js","browser":{"./lib/node/font.js":"./lib/browser/font.js","./lib/node/load.js":"./lib/browser/load.js","./lib/node/write.js":"./lib/browser/write.js","./lib/node/create.js":"./lib/browser/create.js"},"gitHead":"252da86a369521c01c425c048b2c8349bdde7d4b","scripts":{"browserify":"browserify browser.js > canvas-plus.js"},"_npmUser":{"name":"jhuckaby","email":"jhuckaby@gmail.com"},"repository":{"url":"git+https://github.com/jhuckaby/canvas-plus.git","type":"git"},"_npmVersion":"8.1.0","description":"A universal library for manipulating images, built on canvas.","directories":{},"_nodeVersion":"16.12.0","dependencies":{"canvas":"2.9.0","crc-32":"1.0.2","omggif":"1.0.8","exif-js":"2.2.1","image-q":"1.1.1","pixl-cli":"^1.0.0","file-type":"11.0.0","pixl-perf":"^1.0.0","image-size":"0.6.0","pixl-class":"^1.0.0","pixl-tools":"^1.0.0","pixl-request":"^1.0.0","blob-polyfill":"4.0.20190430","blob-to-buffer":"1.2.6"},"_hasShrinkwrap":false,"devDependencies":{"browserify":"16.5.1","browser-process-hrtime":"0.1.2"},"_npmOperationalInternal":{"tmp":"tmp/pixl-canvas-plus_2.0.15_1644278751941_0.5938353950162119","host":"s3://npm-registry-packages"}},"2.0.16":{"name":"pixl-canvas-plus","version":"2.0.16","keywords":["image","canvas","rgba"],"author":{"name":"Joseph Huckaby","email":"jhuckaby@gmail.com"},"license":"MIT","_id":"pixl-canvas-plus@2.0.16","maintainers":[{"name":"jhuckaby","email":"jhuckaby@gmail.com"}],"homepage":"https://github.com/jhuckaby/canvas-plus","bugs":{"url":"https://github.com/jhuckaby/canvas-plus/issues"},"bin":{"pixl-canvas-plus":"cli.js"},"dist":{"shasum":"f095ff62262bcfce9d424c2a2ee1b4caba61da0f","tarball":"https://registry.npmjs.org/pixl-canvas-plus/-/pixl-canvas-plus-2.0.16.tgz","fileCount":35,"integrity":"sha512-xjBIxrfyZW53vfw7VS/GnQ+X/d8e/W6yTNfwMm9Yji9fbrHNil6dfLLuHzoqVz++BIuJcU1LOF0wZaPt+h8KBw==","signatures":[{"sig":"MEUCIQDK0D1BjwHd8ssR5iV1LCXcZTHwko48YXOFOrLCEBb3SAIgZFESLAYJxFMDrXInPxSfY9WqoucNDkTnlxQ0uB1phkk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1041894,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiA1H4CRA9TVsSAnZWagAAgx4P/ihBmtNDIGT0AETRMyRt\nMWYtIMq8Lev8lU9pr98RgpDF4fbDKr3JUqC9L84rAl4ZuLki52mDaTKXFi1H\n/KjgoeyfpGtF3J0QbGHgnIluZkG5hT1/z4GqQdSIPh+FVVvGtU1mRT0TBtU4\nfmK0YWA0mWRrJ+VlaGrSxPJS79OT9U/G1E/xmTZr1Ab1Lp/1fhWKrIMug/rh\nVxl0XSwQIpXsM3awsog6jTqlp5L+uq7I81gxTZMCT8odIuFkT/gUAJKbREfP\nT0uHLjduffvs9ZgQEqaBdwop/PjfvZE9jUp1pyo6c+HU5uqbVkqv/b1ZSBFC\nqDp+RUattNfstysQtRsLadhqw3n/IwKBhtlYpvy3huI/ZDU9MCiCvHk4+2UY\nwjTh2fX3CGPxNqGWyLwGPl3LXZUh55vE624ZM0F7hKy9WDrJhgQe8ExrPJn3\nnIB0TlpFUchyO8Q/c2ve0W5vjoTwFWrxi517gcTxeaICJfA3kPd0eZJj9vYA\nLxXogiDJOJBqmtIhviXqS2s7QJ4XVoN533gKXukkNTbo+iEJd4CK/NrbmBQg\n6lY0vphjColR19Lac41q6chQGNWqmnU8MK9vwZXMKd9egJRvhH9mWmoVILmw\nMI7GYtL5roLtebMp4qtxxerpE9dcsOrNZ0AlgTk8GzjkkQHar4vwP0Rs/pHy\nwSlH\r\n=GPZ7\r\n-----END PGP SIGNATURE-----\r\n"},"main":"main.js","browser":{"./lib/node/font.js":"./lib/browser/font.js","./lib/node/load.js":"./lib/browser/load.js","./lib/node/write.js":"./lib/browser/write.js","./lib/node/create.js":"./lib/browser/create.js"},"gitHead":"944dc949f6bf38957612206d4177ba71176cd867","scripts":{"browserify":"browserify browser.js > canvas-plus.js"},"_npmUser":{"name":"jhuckaby","email":"jhuckaby@gmail.com"},"repository":{"url":"git+https://github.com/jhuckaby/canvas-plus.git","type":"git"},"_npmVersion":"8.1.0","description":"A universal library for manipulating images, built on canvas.","directories":{},"_nodeVersion":"16.12.0","dependencies":{"canvas":"2.9.0","crc-32":"1.0.2","omggif":"1.0.8","exif-js":"2.2.1","image-q":"1.1.1","pixl-cli":"^1.0.0","file-type":"11.0.0","pixl-perf":"^1.0.0","image-size":"0.6.0","pixl-class":"^1.0.0","pixl-tools":"^1.0.0","pixl-request":"^1.0.0","blob-polyfill":"4.0.20190430","blob-to-buffer":"1.2.6"},"_hasShrinkwrap":false,"devDependencies":{"browserify":"16.5.1","browser-process-hrtime":"0.1.2"},"_npmOperationalInternal":{"tmp":"tmp/pixl-canvas-plus_2.0.16_1644384760077_0.26553307909174584","host":"s3://npm-registry-packages"}},"2.0.17":{"name":"pixl-canvas-plus","version":"2.0.17","keywords":["image","canvas","rgba"],"author":{"name":"Joseph Huckaby","email":"jhuckaby@gmail.com"},"license":"MIT","_id":"pixl-canvas-plus@2.0.17","maintainers":[{"name":"jhuckaby","email":"jhuckaby@gmail.com"}],"homepage":"https://github.com/jhuckaby/canvas-plus","bugs":{"url":"https://github.com/jhuckaby/canvas-plus/issues"},"bin":{"pixl-canvas-plus":"cli.js"},"dist":{"shasum":"805912ad47adf2288cbbd82ee9b80faba74ff5ad","tarball":"https://registry.npmjs.org/pixl-canvas-plus/-/pixl-canvas-plus-2.0.17.tgz","fileCount":35,"integrity":"sha512-b6maNjFYt2SIk3shiDaPZIOvTBbooBZbG6tDz8RwPUT5Fx6VrFuIC1XQU/G4Qmci735n0yJdDGk95T1QXP7xMA==","signatures":[{"sig":"MEQCIE8kfcyMpd6VcYN5kv5e4fwh9KJGjUIL9ExC6PcfWKm/AiB4GD3VjJ4paj2kMEmtQw1aQmQ7Vr0CGfdLfiHTTzmKqw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1042798,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiDc0GCRA9TVsSAnZWagAAAYwP/RujPnJw0gzXLXeJuJzK\nxU3kpkLzQscFr78cQGpfgAKe3R6rc5qNNa55fXcP2P4S5TSeGWGz/JNHvAvz\nzB5JMYrbOiLMNDZlhnp8PQT0WLp7DqtF7TQ+Nl85sE9qGMcvlirUz3xEQl0j\nQKoGDXWaUasYuoUAmvIldLr+CMjpxPyOkH2d1iF6yQqLKedwrKkkEG+PXee7\ncrca20xxewpvRrL2olh+FZryjE6moyk1h/4CNKwZCJ44cJhgRtVkXJxnWuto\nBC+L+3IGoy8Csi/ZW3pdJ9BY0/lBoIrtobeQWFAa19X8xOjFoJTWfXKpwPIu\nMuSmW11qJBA1/TC0iRAolyBAZHpCppNgTiapxNaRkyPd6QForXSPDXjWevdg\nLO3CWRG6UCeL4+2k90jlg3mRV6XTqSwsI64zy2rfslow2mqObtXnZXZzgiXX\nE3CX5ABZlFhbTmoIVNoQSwDZWccglv/a3UZxpJv0Nm76i8k0kcYjtRMDbEoQ\np2jGDG9uJ5gdukZU88g6TsK1G/1a8c6nghrRXyia8DShJB8sQMuUlfjTKHSQ\noEzwGh1AlZEtr37ig4e1OjLT31rRALFOHXKCi3IFBa/TwJyRN/fN5FSu5qzJ\nH+UB8hPFTyn6unaMh0xPgqaHxd0k/OqXVflzyZpocoZiwN0DPWRxOlicRS80\nc7zC\r\n=sZpi\r\n-----END PGP SIGNATURE-----\r\n"},"main":"main.js","browser":{"./lib/node/font.js":"./lib/browser/font.js","./lib/node/load.js":"./lib/browser/load.js","./lib/node/write.js":"./lib/browser/write.js","./lib/node/create.js":"./lib/browser/create.js"},"gitHead":"daa114f3f8b25647187d38d527d7b3e2d9ee0d14","scripts":{"browserify":"browserify browser.js > canvas-plus.js"},"_npmUser":{"name":"jhuckaby","email":"jhuckaby@gmail.com"},"repository":{"url":"git+https://github.com/jhuckaby/canvas-plus.git","type":"git"},"_npmVersion":"8.1.0","description":"A universal library for manipulating images, built on canvas.","directories":{},"_nodeVersion":"16.12.0","dependencies":{"canvas":"2.9.0","crc-32":"1.0.2","omggif":"1.0.8","exif-js":"2.2.1","image-q":"1.1.1","pixl-cli":"^1.0.0","file-type":"11.0.0","pixl-perf":"^1.0.0","image-size":"0.6.0","pixl-class":"^1.0.0","pixl-tools":"^1.0.0","pixl-request":"^1.0.0","blob-polyfill":"4.0.20190430","blob-to-buffer":"1.2.6"},"_hasShrinkwrap":false,"devDependencies":{"browserify":"16.5.1","browser-process-hrtime":"0.1.2"},"_npmOperationalInternal":{"tmp":"tmp/pixl-canvas-plus_2.0.17_1645071622631_0.008768303715082748","host":"s3://npm-registry-packages"}},"2.0.18":{"name":"pixl-canvas-plus","version":"2.0.18","keywords":["image","canvas","rgba"],"author":{"name":"Joseph Huckaby","email":"jhuckaby@gmail.com"},"license":"MIT","_id":"pixl-canvas-plus@2.0.18","maintainers":[{"name":"jhuckaby","email":"jhuckaby@gmail.com"}],"homepage":"https://github.com/jhuckaby/canvas-plus","bugs":{"url":"https://github.com/jhuckaby/canvas-plus/issues"},"bin":{"pixl-canvas-plus":"cli.js"},"dist":{"shasum":"b09569b9dbc5da315b81e96ff9985b1068d78dd3","tarball":"https://registry.npmjs.org/pixl-canvas-plus/-/pixl-canvas-plus-2.0.18.tgz","fileCount":35,"integrity":"sha512-SkVaG2Q7wpiSvhliX/ClWD1pkrvvSI88dxhZJdzACwdgWTqahLvOfZSDKsk6dtjxWOLTMw3GVD7pxREwaw0O/w==","signatures":[{"sig":"MEUCIDtb6M9DiL/J/HVyjcVdmudpSxx6O8tPKyzAc3eNzrU/AiEAp0ipyfrTJGC5Ml8cXcO2S8ZqcDNwcGPzysEvO/QykME=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1042798,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiOBE4ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmrghg/+LXe4cU9eSzN+ni3GpjTX8YqEc94LwZlEd6GLPzZu9kDPq2WL\r\n/p7rxa7pvUj6KAv31zo/ghn05Jg0B9tB7zIpJfAl7RgnsuumqasYpd+zTqVq\r\ncVoQptB8dQbDNeCnu56YVEzRygKr/lTA1nhY58IQZmCuTdzT5o3u7rsTAhXz\r\ntU5F/Ub9mafZq4i8EXCzCs3AxRa7HjryQgJgZQrqlyeDosmmiscfeXRXugQK\r\nzsnxgvOaYrqGGurW/DKUGnofG2HdBuACOb7X8q/Yelr6cHHjZOWE05Ko22sm\r\nKRaeXN37lH6HAjtuYHNCOuM+RlAM7oB3utYK7vR6QqvPJpLPtHa4dL/cP1z3\r\nRuK0TC3qMqHnrfzW2p4jIF2j/UdLWORs/zCZySLuqBWApgyHzr5ytKMxC4lu\r\njAd3Naemgkhu99McPxvSa4MjZqPBQfX7ciLt29BZu+ttPQUVezEn22UCa0H6\r\nhiUKSJxp24bSjxjVnmnaOFvWrR8IzGgarsddeW9HsZxmBY4PU4/fIiWnNm7b\r\n05rkBoqKnYKFhaMDzF3zCAQUjQxBMUEeTUnSB245/oi3Y4S6rs7Bh83GWD/k\r\n5AWECJXY2lkS9Fuy4t9GOK2DPjh9S0sJkrd2QV/VoMEAjIBzSC2Z92cLJgy1\r\ncHMKDVQycze+kza5ew52EGFRor6MGOzX9yQ=\r\n=PTJ0\r\n-----END PGP SIGNATURE-----\r\n"},"main":"main.js","browser":{"./lib/node/font.js":"./lib/browser/font.js","./lib/node/load.js":"./lib/browser/load.js","./lib/node/write.js":"./lib/browser/write.js","./lib/node/create.js":"./lib/browser/create.js"},"gitHead":"dcb3acdb5f2f9a70a3513d0f304df21246e527cf","scripts":{"browserify":"browserify browser.js > canvas-plus.js"},"_npmUser":{"name":"jhuckaby","email":"jhuckaby@gmail.com"},"repository":{"url":"git+https://github.com/jhuckaby/canvas-plus.git","type":"git"},"_npmVersion":"8.1.0","description":"A universal library for manipulating images, built on canvas.","directories":{},"_nodeVersion":"16.12.0","dependencies":{"canvas":"2.9.1","crc-32":"1.0.2","omggif":"1.0.8","exif-js":"2.2.1","image-q":"1.1.1","pixl-cli":"^1.0.0","file-type":"11.0.0","pixl-perf":"^1.0.0","image-size":"0.6.0","pixl-class":"^1.0.0","pixl-tools":"^1.0.0","pixl-request":"^1.0.0","blob-polyfill":"4.0.20190430","blob-to-buffer":"1.2.6"},"_hasShrinkwrap":false,"devDependencies":{"browserify":"16.5.1","browser-process-hrtime":"0.1.2"},"_npmOperationalInternal":{"tmp":"tmp/pixl-canvas-plus_2.0.18_1647841592050_0.8625412558960741","host":"s3://npm-registry-packages"}},"2.0.19":{"name":"pixl-canvas-plus","version":"2.0.19","keywords":["image","canvas","rgba"],"author":{"name":"Joseph Huckaby","email":"jhuckaby@gmail.com"},"license":"MIT","_id":"pixl-canvas-plus@2.0.19","maintainers":[{"name":"jhuckaby","email":"jhuckaby@gmail.com"}],"homepage":"https://github.com/jhuckaby/canvas-plus","bugs":{"url":"https://github.com/jhuckaby/canvas-plus/issues"},"bin":{"pixl-canvas-plus":"cli.js"},"dist":{"shasum":"92697f1cc9310149f35a7839812d08595f530ace","tarball":"https://registry.npmjs.org/pixl-canvas-plus/-/pixl-canvas-plus-2.0.19.tgz","fileCount":35,"integrity":"sha512-BXPYGA24s6J3y2mbT/PjIIfuwnd3VUs/Uo9p69gLn22yoYcAshEbuoFCmdYc9xpARv9r7o1KDo1W3JqIRiohng==","signatures":[{"sig":"MEYCIQDF1pAvoaO5hdgZyssGcrQQGJdz7/pobAhjwxBJRZ1vsAIhAO5pOJkyfy5583rkHWvYBeK+JU39SjFPiPOZPe+4VTeF","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1042798,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiQJMcACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqPwg//ZG3sH9CsUjo4JSou2Ym3pBHQGh5gae8M5TQ9MJltIhbntsDu\r\nwCWf4M99NxgnmgjaPmffTXPUSLSthGrQhMcOOJSAG3+LF4O12Li+5VbybGm7\r\n4WVxGgR5+NG+C1uMavHPX3LJnGI6LfW7UhDCKLhbYIF84JioE6GDbl1/+84F\r\nLv1CYOas4gVksJIST9ZcHqnsnfpFgjev7dxgF0D4k96UH5ksLR/D6IBosVDo\r\n04xzMtz3yU/TZYacff8vtODiQvvUAQZaXGIEKYuhsweosgU9oP2J3FIO0uhW\r\nHtqIWo7metnHye2LJin33h/hrg503lbTCVOfLekZQ6abGv1Wz6wENPIC/+pl\r\nIQ9auAbD56XLe7I6qnhTYGpzcefBcQ3+SFWBa+9I3Uj2pH0P1spcWWxUwk9o\r\nNSaf3PoYnTWrREP8aMuNbyeSg4biQTOzVqLZlllds0W1ltCskHJ//2vE1TtY\r\nfx6xzdOA8XPVj8rfO9OIBYDn98iP7+bpTr5yDqK6ypqU7i3p/uXwXii2DOdj\r\ntjvqpmn83LqURPEFvk8879rtFOBxHPuWrh1Z3NcKv4SG2FS/+pwEA0+DLqz3\r\n5ghI6xdXx4P17K34HjT7kOWSKfAdFfN9h9drTi1xeARDl73+8ZAfS+MzdGYR\r\nuGyXnnmuPhXP+/pTVuuRq0/GWPpN/ofpVv4=\r\n=yWhs\r\n-----END PGP SIGNATURE-----\r\n"},"main":"main.js","browser":{"./lib/node/font.js":"./lib/browser/font.js","./lib/node/load.js":"./lib/browser/load.js","./lib/node/write.js":"./lib/browser/write.js","./lib/node/create.js":"./lib/browser/create.js"},"gitHead":"b43d31cd81d0eaeeb587a520aca1965159311c9f","scripts":{"browserify":"browserify browser.js > canvas-plus.js"},"_npmUser":{"name":"jhuckaby","email":"jhuckaby@gmail.com"},"repository":{"url":"git+https://github.com/jhuckaby/canvas-plus.git","type":"git"},"_npmVersion":"8.1.0","description":"A universal library for manipulating images, built on canvas.","directories":{},"_nodeVersion":"16.12.0","dependencies":{"canvas":"2.9.1","crc-32":"1.0.2","omggif":"1.0.8","exif-js":"2.2.1","image-q":"1.1.1","pixl-cli":"^1.0.0","file-type":"11.0.0","pixl-perf":"^1.0.0","image-size":"0.6.0","pixl-class":"^1.0.3","pixl-tools":"^1.0.0","pixl-request":"^1.0.0","blob-polyfill":"4.0.20190430","blob-to-buffer":"1.2.6"},"_hasShrinkwrap":false,"devDependencies":{"browserify":"16.5.1","browser-process-hrtime":"0.1.2"},"_npmOperationalInternal":{"tmp":"tmp/pixl-canvas-plus_2.0.19_1648399132657_0.9048123363718643","host":"s3://npm-registry-packages"}},"2.0.20":{"name":"pixl-canvas-plus","version":"2.0.20","keywords":["image","canvas","rgba"],"author":{"name":"Joseph Huckaby","email":"jhuckaby@gmail.com"},"license":"MIT","_id":"pixl-canvas-plus@2.0.20","maintainers":[{"name":"jhuckaby","email":"jhuckaby@gmail.com"}],"homepage":"https://github.com/jhuckaby/canvas-plus","bugs":{"url":"https://github.com/jhuckaby/canvas-plus/issues"},"bin":{"pixl-canvas-plus":"cli.js"},"dist":{"shasum":"50e5df4319fb4b9ce28a2e4b74dace921b7bbc8f","tarball":"https://registry.npmjs.org/pixl-canvas-plus/-/pixl-canvas-plus-2.0.20.tgz","fileCount":35,"integrity":"sha512-xb5oSdeiiD21aJ6qx7v2E+9kXGLV7b9kJkCOolsq7Vrq3+ebJIb5xvC21UJblspmiP/ANC6jglEB33CZt73k6g==","signatures":[{"sig":"MEMCIDpjrNXKXciRVEfGtdz9h3jry9Yg/fRYp3DhHc31546UAh8RNsGp8mLl7dQJxfpyCPXJcq8iB1sV4Y5pmBvOzJJG","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1043006,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJij88YACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrM5RAAobGEc+SsoxrzCt4MgD2yXBpiHCm7VXN6byWn6w5Gqv+vwJ6W\r\n9C0akKBoV6cCQRW/Byn2icPR9nbfuxaEpzP6vD/rZ7RxLBDwClY0+Tj8hlLb\r\nEvE8JGAlz6evwPZiqpV43GcO/WKE6W57J5bT0IfoWvUNGXrHos7kHw0QWgJI\r\notEKNe5Gt2apORoU+/kek4H26fd4qZgflHZ6ZRWR2TdwrJtCDqHE1F317o83\r\nC1VFF54F3DYHmqO1/rmJD4ESMymO+N0CBl9PYseEDdM8yrwDwx3J3gYTcd6n\r\nZDvk7rkeSzqbXzVQ4Nx+IoU3Gjlfy8mUsd6JKY9qnj3jXGf1zaxxqRKNG8TW\r\n6bFoVCUWMNJUO+XZIoN/2u+InD2cQLy9itoIa/gfdv3jCxUYqWVlt4yxocqn\r\ntzCmar93QAUoAGsOdCxVqcag1mR0vEpQdL4W5ojJfzRb15COxO2zSfWsZKRU\r\nkr2GaKM2zbv1rib8JRc4HAdBd6zfboq6A7/WC84Mz88ePz0MXJSw5cHAsYWM\r\ngGv/Mhq92VjYNtgzQca2S9nUR4KOGEYUqHi+UdPgRD32kZRTKPThnfZKoSX1\r\nkkMHo+Hl4CC+A+ZWd3JTls90R/4UjEn8sU+XVv6GvVmsCgMOVsBCnZ+TpE/X\r\nCeG2Ty9boL3RTGOC4Xb05WouyXwTBOZKPgo=\r\n=LdnA\r\n-----END PGP SIGNATURE-----\r\n"},"main":"main.js","browser":{"./lib/node/font.js":"./lib/browser/font.js","./lib/node/load.js":"./lib/browser/load.js","./lib/node/write.js":"./lib/browser/write.js","./lib/node/create.js":"./lib/browser/create.js"},"gitHead":"53067c9e70160bf7298436e145a9065fcfa01e52","scripts":{"browserify":"browserify browser.js > canvas-plus.js"},"_npmUser":{"name":"jhuckaby","email":"jhuckaby@gmail.com"},"repository":{"url":"git+https://github.com/jhuckaby/canvas-plus.git","type":"git"},"_npmVersion":"8.1.0","description":"A universal library for manipulating images, built on canvas.","directories":{},"_nodeVersion":"16.12.0","dependencies":{"canvas":"2.9.0","crc-32":"1.0.2","omggif":"1.0.8","exif-js":"2.2.1","image-q":"1.1.1","pixl-cli":"^1.0.0","file-type":"11.0.0","pixl-perf":"^1.0.0","image-size":"0.6.0","pixl-class":"^1.0.3","pixl-tools":"^1.0.0","pixl-request":"^1.0.0","blob-polyfill":"4.0.20190430","blob-to-buffer":"1.2.6"},"_hasShrinkwrap":false,"devDependencies":{"browserify":"16.5.1","browser-process-hrtime":"0.1.2"},"_npmOperationalInternal":{"tmp":"tmp/pixl-canvas-plus_2.0.20_1653591831814_0.3654165904497657","host":"s3://npm-registry-packages"}},"2.1.0":{"name":"pixl-canvas-plus","version":"2.1.0","keywords":["image","canvas","rgba"],"author":{"name":"Joseph Huckaby","email":"jhuckaby@gmail.com"},"license":"MIT","_id":"pixl-canvas-plus@2.1.0","maintainers":[{"name":"jhuckaby","email":"jhuckaby@gmail.com"}],"homepage":"https://github.com/jhuckaby/canvas-plus","bugs":{"url":"https://github.com/jhuckaby/canvas-plus/issues"},"bin":{"pixl-canvas-plus":"cli.js"},"dist":{"shasum":"bd432d9eb0fd6ed9711b20d3b6f9acaffe3809f0","tarball":"https://registry.npmjs.org/pixl-canvas-plus/-/pixl-canvas-plus-2.1.0.tgz","fileCount":36,"integrity":"sha512-h65i860AwSix7iUguVf5KEsyT/ox9gIzqdQLtAr6IFTfuBXBzMqNmRAnMkPYIYM4ASBdZW1aSCctq6qP4iKmBw==","signatures":[{"sig":"MEUCIQDWhoq+3q4MX7N3ZDQ4iczf5KPtDr3jyupmkf9+uwvvawIgGNkLj2mYzvGa41iFtiFSfrzxSXTGc54Eg5FK376STVg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1340563,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj+v5SACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmpazw//a9sYo4iokpIWm17V7pjdLvpoxY5hJQdrKfFEXsulxfN69N8T\r\nLDsDAt18SKZnyetyj09k/mQ/XV3j9vIn9N43FPgwBj/KOVhRLDoxNGLjp3rX\r\nOYTWSAGwgMGzxt3v6WBbf40C5oRPjZwWpQDoZhIF5477vDuZYva4JwPT1t5G\r\nMWdI88HFJOloE90+Nw5kMXwEzjNF3Cfa8hOFL6DHc+xQdTgMYQTudOT6I41b\r\np9ccwcGmAt9+LWe9ZWXOU2tdbY41U1U2/3I74J1DXFGfybY9p2P6FSzk/BxV\r\nSDjzcpOcM/tZquxqHj+pii4LV9ARJOg41w0HGs0kmj9FB3H+w1RbZFGLsMn+\r\nILBCMYqTAgCM8QLKLwZlrxQsGaaABH0YH5g4H21QtZUyDYPbl1PsmXfFfdrX\r\nNT2OqPMuH7+lT5vTv5Gte8jh11vo6Tl8p/A6Tlp+pe5sM7xS+4LeRanShS5+\r\nPFwwMt5psGGBtUBECUnlfMJAh5YdJ0HGjNUQJifIT2xk0rETDGWDFNJa4QrE\r\nqLAIpateIoA6NrHDaZuDeWlPVE/K700XBcHb5ga25rHdKm/yKGxqdre6j9mG\r\nGuNs8o6f0NB83trANgLmpr0oxtR/dnsud8iEfU7gJgl3GJswNx1yhvUQm/7f\r\nx/UOnoNM+w+TN75r3RZExFAhx2p+A0kPVBg=\r\n=TwxX\r\n-----END PGP SIGNATURE-----\r\n"},"main":"main.js","browser":{"./lib/node/font.js":"./lib/browser/font.js","./lib/node/load.js":"./lib/browser/load.js","./lib/node/write.js":"./lib/browser/write.js","./lib/node/create.js":"./lib/browser/create.js"},"gitHead":"9a357618d53d16d3253e08594b8192a410fc88e0","scripts":{"browserify":"browserify browser.js > canvas-plus.js"},"_npmUser":{"name":"jhuckaby","email":"jhuckaby@gmail.com"},"repository":{"url":"git+https://github.com/jhuckaby/canvas-plus.git","type":"git"},"_npmVersion":"9.3.1","description":"A universal library for manipulating images, built on canvas.","directories":{},"_nodeVersion":"18.14.0","dependencies":{"canvas":"2.9.0","crc-32":"1.2.0","omggif":"1.0.8","image-q":"1.1.1","pixl-cli":"^1.0.0","file-type":"11.0.0","pixl-perf":"^1.0.0","webp-wasm":"1.0.0","exifreader":"4.9.1","image-size":"1.0.2","pixl-class":"^1.0.3","pixl-tools":"^1.0.0","pixl-request":"^2.0.0","blob-to-buffer":"1.2.6"},"_hasShrinkwrap":false,"devDependencies":{"browserify":"16.5.1","browser-process-hrtime":"0.1.2"},"_npmOperationalInternal":{"tmp":"tmp/pixl-canvas-plus_2.1.0_1677393489929_0.8030295575388202","host":"s3://npm-registry-packages"}},"2.1.1":{"name":"pixl-canvas-plus","version":"2.1.1","keywords":["image","canvas","rgba"],"author":{"name":"Joseph Huckaby","email":"jhuckaby@gmail.com"},"license":"MIT","_id":"pixl-canvas-plus@2.1.1","maintainers":[{"name":"jhuckaby","email":"jhuckaby@gmail.com"}],"homepage":"https://github.com/jhuckaby/canvas-plus","bugs":{"url":"https://github.com/jhuckaby/canvas-plus/issues"},"bin":{"pixl-canvas-plus":"cli.js"},"dist":{"shasum":"564b35358ea986620d69b451b435067307e560f0","tarball":"https://registry.npmjs.org/pixl-canvas-plus/-/pixl-canvas-plus-2.1.1.tgz","fileCount":36,"integrity":"sha512-ZXPBACPNLoiWeWmzExX+/w10fJb4ak24ljqGfsTlNEIhbaXM3kEjHYzq80eKX8mAtxfPBYLUrXtA3gyMWRkERA==","signatures":[{"sig":"MEYCIQC+9LvQJot5szZybOs4as9VCpye35hDElwYw7kbJawJ4wIhAP3D2P8UA2zgaI9hUbPoX1Du7E+yVZHggsye7yyfmtBT","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1341707,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj+7aVACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpdCQ/+NxNCHALAXEF6aKpD99AZN+HcyebvqlJFU1qlOV+Zdu0TPC6a\r\n8OLaPL8s2x2+jAxnDi16hsJdf6q972xGf+uHz+7Ue8d2UEsQhrBTnD9wnI7m\r\nmi0ClSRoS55PMRHD9SD38ZSxbfiZtY2Qw7dtYh+NHD1o2uyP7067uQChEi3m\r\noJpU1A94RJzZQ1BZDSVmRThQO7aRTJN+dUOoggzPxJyCdB/WcOxjTiHK0BaJ\r\nXFzau17n43l4USTDf1UQizRE4jBBovy3z3blzRh2bU+agDxs6PI9QDzCPhXs\r\n0g8uySUZyL+zW+Tt5ybWbwgVHQeM5V2by7xCOitwpW/gNfPQheYjSUH/TWsU\r\nzj6LEi0WkT5DqM+4Pf4MZbAGJIStRF5hdAW2wuDi2e60R8j6sTiG5rJij+Dj\r\nFGsylcefxUwNaJxQW7DQ3pO51WPER5WnjmqAK2FLG0+t4AsIvoWs1SvciwDS\r\nVwvqTar4ub4R5s6SOVMIVxRmDa7jkJgBHPEXmoRyANiut2J3Ukg7pfOpn9/6\r\nNIkHm4LcXEa8nP5Fwr0J1H/xJpewCei9/QdvWZkmfgvgwcSZz6c5FoBvObJi\r\nIJipo8r4qqBozzJ4ui4xwmX0DY3DFosUGKF4X7//vAcsQ14SEs9QZFMHALO/\r\nSs6o0WtNaCJVS8DunB+ROl07dtWLcpt65PI=\r\n=KdOG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"main.js","browser":{"./lib/node/font.js":"./lib/browser/font.js","./lib/node/load.js":"./lib/browser/load.js","./lib/node/write.js":"./lib/browser/write.js","./lib/node/create.js":"./lib/browser/create.js"},"gitHead":"7b64db7f5d569f6ddbff33efb718ac9cd4894c73","scripts":{"browserify":"browserify browser.js > canvas-plus.js"},"_npmUser":{"name":"jhuckaby","email":"jhuckaby@gmail.com"},"repository":{"url":"git+https://github.com/jhuckaby/canvas-plus.git","type":"git"},"_npmVersion":"9.3.1","description":"A universal library for manipulating images, built on canvas.","directories":{},"_nodeVersion":"18.14.0","dependencies":{"canvas":"2.9.0","crc-32":"1.2.0","omggif":"1.0.8","image-q":"1.1.1","pixl-cli":"^1.0.0","file-type":"11.0.0","pixl-perf":"^1.0.0","webp-wasm":"1.0.0","exifreader":"4.9.1","image-size":"1.0.2","pixl-class":"^1.0.3","pixl-tools":"^1.0.0","pixl-request":"^2.0.0","blob-to-buffer":"1.2.6"},"_hasShrinkwrap":false,"devDependencies":{"browserify":"16.5.1","browser-process-hrtime":"0.1.2"},"_npmOperationalInternal":{"tmp":"tmp/pixl-canvas-plus_2.1.1_1677440660853_0.2215904872639598","host":"s3://npm-registry-packages"}},"2.1.2":{"name":"pixl-canvas-plus","version":"2.1.2","keywords":["image","canvas","rgba"],"author":{"name":"Joseph Huckaby","email":"jhuckaby@gmail.com"},"license":"MIT","_id":"pixl-canvas-plus@2.1.2","maintainers":[{"name":"jhuckaby","email":"jhuckaby@gmail.com"}],"homepage":"https://github.com/jhuckaby/canvas-plus","bugs":{"url":"https://github.com/jhuckaby/canvas-plus/issues"},"bin":{"pixl-canvas-plus":"cli.js"},"dist":{"shasum":"66e5d73af512e30fdc82c907f37bfdbb033b3847","tarball":"https://registry.npmjs.org/pixl-canvas-plus/-/pixl-canvas-plus-2.1.2.tgz","fileCount":36,"integrity":"sha512-k1qIL0n759I3UpFu4iM2RIqgbjeK/9qFGA44syWzL4mIiXpdO91Hh9XXNq/i28lIGgvp408GDCd42RqewVMPzA==","signatures":[{"sig":"MEUCIQCeHXUZLkoFzicIoxNXSNkGQDGeIK1U4Ltq6ohgmAQiDwIgLmqSDcCtcFXi98P1sbeIl/Ap5ErtzxVUrvFlLHTowj8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1342038,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj/ZrSACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr5Mw/+IAo1jSHlqjGU4Sy1cAAl0CgGetOojW+EpdEyfmBEKhs93LQi\r\nl9VETj1oma9ZZTWdu+HJOxkMrROtew8UF91lsSu1f/jkd9wNRuS6DB84vdD6\r\njLqKKgCoDMlK83dw2kbP4nyo01fvsmZRBi5Iu1W1QbbiKqfdg0uQ8bK4iv9j\r\nHSt+idqmL3bJl8zaMcytdetpymOEizr/3eqG2YunttxDAOnhiAHCLCuEj/Zt\r\nXT+SwOAPiryW+czMIBsevj/CMVz22VvbwX65jMX7YMcX+eaSotciSdZpKn4t\r\nQMp4ipodaXJS3EVrXDbWgq6/UWrKZ6sKoHU7Hpws2UYM/ona9JnOkBJWJndb\r\na3nh2xVnASE7xfR1aVbHOleq0RFlpDtPxexV0cfmFZ92uIXP0K8wDqs9hJ8b\r\nULNj2t+kxEsuNyh5hXa7n2MAxumKz/XW/J7JLpuDMQJADj0z9e4diKuAMrj9\r\ndbo5EHWQtRNibtjq/on8/YCbG19R8ysKUa7f7/Pcyz+2A9OONbKMsBcKSfJF\r\nfM5U2HPRc7TzIatgc/PB68+geQ45zw7kFC2KNUFjVOHV8SjwUveb7B3AB/xL\r\n2w9bWtqT7OZYPanr5+AsL8WRTUN7SwsJjtQoUg1SScSoFP1USQSZxdToyDF+\r\nckBd6YInFxySNneK5nvctwEJbn5q1FfnzxE=\r\n=ghN5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"main.js","browser":{"./lib/node/font.js":"./lib/browser/font.js","./lib/node/load.js":"./lib/browser/load.js","./lib/node/write.js":"./lib/browser/write.js","./lib/node/create.js":"./lib/browser/create.js"},"gitHead":"5f8516effcf9f5876d16fbcf81f575e67ac72873","scripts":{"browserify":"browserify browser.js > canvas-plus.js"},"_npmUser":{"name":"jhuckaby","email":"jhuckaby@gmail.com"},"repository":{"url":"git+https://github.com/jhuckaby/canvas-plus.git","type":"git"},"_npmVersion":"9.3.1","description":"A universal library for manipulating images, built on canvas.","directories":{},"_nodeVersion":"18.14.0","dependencies":{"canvas":"2.9.0","crc-32":"1.2.0","omggif":"1.0.8","image-q":"1.1.1","pixl-cli":"^1.0.0","file-type":"11.0.0","pixl-perf":"^1.0.0","webp-wasm":"1.0.0","exifreader":"4.9.1","image-size":"1.0.2","pixl-class":"^1.0.3","pixl-tools":"^1.0.0","pixl-request":"^2.0.0","blob-to-buffer":"1.2.6"},"_hasShrinkwrap":false,"devDependencies":{"browserify":"16.5.1","browser-process-hrtime":"0.1.2"},"_npmOperationalInternal":{"tmp":"tmp/pixl-canvas-plus_2.1.2_1677564626033_0.1333005071393576","host":"s3://npm-registry-packages"}},"2.1.3":{"name":"pixl-canvas-plus","version":"2.1.3","keywords":["image","canvas","rgba"],"author":{"name":"Joseph Huckaby","email":"jhuckaby@gmail.com"},"license":"MIT","_id":"pixl-canvas-plus@2.1.3","maintainers":[{"name":"jhuckaby","email":"jhuckaby@gmail.com"}],"homepage":"https://github.com/jhuckaby/canvas-plus","bugs":{"url":"https://github.com/jhuckaby/canvas-plus/issues"},"bin":{"pixl-canvas-plus":"cli.js"},"dist":{"shasum":"da652d82dcfc0ab18b49ba516b0b68980a160205","tarball":"https://registry.npmjs.org/pixl-canvas-plus/-/pixl-canvas-plus-2.1.3.tgz","fileCount":36,"integrity":"sha512-rIax57g+dhXOPC1fW/ZHJCJlIFRGiOKa7doUPEPfo9+H4XLLA1TyahK7RqVzjViqqga6QtBJYn2aXjGUfG+5kg==","signatures":[{"sig":"MEUCIQDRqFmQduLvrpat9rJt0hKFKJu/ppmG18dZOp7wPafKhAIgRq+J4R6A34RT42OgNp58M1TSh0K3mUaZnXpmc0l/uSI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1342600,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj/jQaACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpvYhAAifkKdOFIeNjPnHbumn4P4W4eM1K2a5SBJ5+i3bCcX9a3pY6k\r\nIqwd6kbk4bwR4cjBQWeIWWTtUBGRD/7zSw0ykoK4ZWmVMgPfDnVtoX4lSbQb\r\nk8454bEMIhbkT0MBmjCdn9SuJJZXAgvdMgs+YuZLjfq1W66E8y8OZVTmMGMW\r\nv2ndVrolkv1y/J2AdDDcvAS1Hc0HrjI59CwCb+uNj5QFj8viDLTV9c7Guhcx\r\nNBybelnpjsbFOAzMigp9My2MwUsSExgtbCddzr2ZXa/HjbGvStMhr+COOA2d\r\ngCV2pUKtAj3DVSzw0X9RWH7i8aefXUmi2CrWoWBmiNnj7QYEgwQB+5WRt6jc\r\naqXiRuGCG/OntYW4O7U0fmq3JWVIyEJeqZsmpg/Bfj1mhFeoKG8hF8zfMghY\r\nVLFNdjPa7VxqF8r3f6u17i4Nj79eVxBDXTy+tXQh0qeihqu8TAbfh0oupLuD\r\nXAbFeeKby36x1Fp8GQgNI5iA02rTYFZ6jB2kLR3hcIbnGoLu9wlc7/IuplhJ\r\nChTJT8yAEBSwvPllCfpCqjfGUvLU62lpyl1ucvP6ZZ1DA2J3nlClTnGWF48j\r\nFYN8xAMO6i4O9OHm8htUngsSiiA8Uxls4Lbiy0JS6u2lfP38Wkx7Dqx5fDr4\r\nJVAgyCA+FEgZGudVxTJ5jlAPLQsr6kqOyUs=\r\n=NBPI\r\n-----END PGP SIGNATURE-----\r\n"},"main":"main.js","browser":{"./lib/node/font.js":"./lib/browser/font.js","./lib/node/load.js":"./lib/browser/load.js","./lib/node/write.js":"./lib/browser/write.js","./lib/node/create.js":"./lib/browser/create.js"},"gitHead":"85ed18e90b3619ea50c08ca590cf3ce8e9344c27","scripts":{"browserify":"browserify browser.js > canvas-plus.js"},"_npmUser":{"name":"jhuckaby","email":"jhuckaby@gmail.com"},"repository":{"url":"git+https://github.com/jhuckaby/canvas-plus.git","type":"git"},"_npmVersion":"9.3.1","description":"A universal library for manipulating images, built on canvas.","directories":{},"_nodeVersion":"18.14.0","dependencies":{"canvas":"2.9.0","crc-32":"1.2.0","omggif":"1.0.8","image-q":"1.1.1","pixl-cli":"^1.0.0","file-type":"11.0.0","pixl-perf":"^1.0.0","webp-wasm":"1.0.0","exifreader":"4.9.1","image-size":"1.0.2","pixl-class":"^1.0.3","pixl-tools":"^1.0.0","pixl-request":"^2.0.0","blob-to-buffer":"1.2.6"},"_hasShrinkwrap":false,"devDependencies":{"browserify":"16.5.1","browser-process-hrtime":"0.1.2"},"_npmOperationalInternal":{"tmp":"tmp/pixl-canvas-plus_2.1.3_1677603866375_0.7672892398052349","host":"s3://npm-registry-packages"}},"2.1.4":{"name":"pixl-canvas-plus","version":"2.1.4","keywords":["image","canvas","rgba"],"author":{"name":"Joseph Huckaby","email":"jhuckaby@gmail.com"},"license":"MIT","_id":"pixl-canvas-plus@2.1.4","maintainers":[{"name":"jhuckaby","email":"jhuckaby@gmail.com"}],"homepage":"https://github.com/jhuckaby/canvas-plus","bugs":{"url":"https://github.com/jhuckaby/canvas-plus/issues"},"bin":{"pixl-canvas-plus":"cli.js"},"dist":{"shasum":"c09fa71f100a6781ce259c48ed53fc6c0c4f1c55","tarball":"https://registry.npmjs.org/pixl-canvas-plus/-/pixl-canvas-plus-2.1.4.tgz","fileCount":36,"integrity":"sha512-Qey7c433rG4q5AerBCVTuhBXG4iGEzeGiueSreDL6qs0vsSb7/xrq7W8hKu9BYk8miV079cxh3qS9ea3KFJfHQ==","signatures":[{"sig":"MEYCIQC1R8pZi+2EvWH6jxqti770gitcREdUYLfG9UPyOZhTtwIhAJkory1KD3LNLzofqeN7RvODKpdTlVEOYhgKPvDd7tj4","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1342601,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj/kJAACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrdEg//ZJeDzaYO+2L3T/wgYzBpXYECSPzbYMr6fKVxhC4HhkudvHLc\r\nueM0rd3QAJF2Ocqa+zWF5oEfogtN5cbUH1l7zTb6crKZtMvRGQYiB2O2t5+L\r\nsuFAgMEkxFLjs1JLUdekHjrCNsLXOMPMhIZlXOV5XAIEa6FmvcWvHw7IaIwU\r\nOjKzDock5v2ZTJIWRoI6Z+XILYzkphS/rg2k2A8b03wnrDb7rgBqUsUcBNBg\r\n7/Bule6HBDYPXCDovmYHdvYNH1Zk5ELCmigu9OtYmGkM9FW9wkFDIlCzXS2c\r\nCRmMV0xNqG+QJ+x3+0xul5xFg96JM8dEtOsM397gBRbYFgaSjU0osffqsSmr\r\ni4ggRuEAmVmPFzmgVosLIi7Vk7DchFqLo7gKJu9SzqszuyaCjgbxcTpLMkCJ\r\n08ADLWFEdaL0U6BwRJH0gqvBP37huaF8jMrREGovyqu1Cq3xk135jc89a0mP\r\nuNYISTiQHGPQ1kR2uFtaOpPaSg8Yxz2tf/ZQHRr2bRL/5KS8+VvehVLS7nFk\r\n9kYUqcwUJyyyjRdiZVYhqNo315nHEMGT9Qs0Ce6QLpXVCgDHBeOtTtvMeBsV\r\nY/8P3VBpfWeg0tCQHhY35Ej5NulSK7EQZ5l2xV5d3Y6uGFM+xdt+lQ53bfYO\r\n8ypWv+lWP7YAtGzD7R2hMVrubtkuIHLXVmo=\r\n=7TWc\r\n-----END PGP SIGNATURE-----\r\n"},"main":"main.js","browser":{"./lib/node/font.js":"./lib/browser/font.js","./lib/node/load.js":"./lib/browser/load.js","./lib/node/write.js":"./lib/browser/write.js","./lib/node/create.js":"./lib/browser/create.js"},"gitHead":"1bddb90a2832f86d27d61ec444d24214e073ede4","scripts":{"browserify":"browserify browser.js > canvas-plus.js"},"_npmUser":{"name":"jhuckaby","email":"jhuckaby@gmail.com"},"repository":{"url":"git+https://github.com/jhuckaby/canvas-plus.git","type":"git"},"_npmVersion":"9.3.1","description":"A universal library for manipulating images, built on canvas.","directories":{},"_nodeVersion":"18.14.0","dependencies":{"canvas":"2.9.0","crc-32":"1.2.0","omggif":"1.0.8","image-q":"1.1.1","pixl-cli":"^1.0.0","file-type":"11.0.0","pixl-perf":"^1.0.0","webp-wasm":"^1.0.2","exifreader":"4.9.1","image-size":"1.0.2","pixl-class":"^1.0.3","pixl-tools":"^1.0.0","pixl-request":"^2.0.0","blob-to-buffer":"1.2.6"},"_hasShrinkwrap":false,"devDependencies":{"browserify":"16.5.1","browser-process-hrtime":"0.1.2"},"_npmOperationalInternal":{"tmp":"tmp/pixl-canvas-plus_2.1.4_1677607487942_0.9176107977971018","host":"s3://npm-registry-packages"}},"2.1.5":{"name":"pixl-canvas-plus","version":"2.1.5","keywords":["image","canvas","rgba"],"author":{"name":"Joseph Huckaby","email":"jhuckaby@gmail.com"},"license":"MIT","_id":"pixl-canvas-plus@2.1.5","maintainers":[{"name":"jhuckaby","email":"jhuckaby@gmail.com"}],"homepage":"https://github.com/jhuckaby/canvas-plus","bugs":{"url":"https://github.com/jhuckaby/canvas-plus/issues"},"bin":{"pixl-canvas-plus":"cli.js"},"dist":{"shasum":"6c259bbea04365182ecee4b8e07fb257c5148248","tarball":"https://registry.npmjs.org/pixl-canvas-plus/-/pixl-canvas-plus-2.1.5.tgz","fileCount":36,"integrity":"sha512-C9UkYGspthTlnaAjllUMB3tJwXiGTBu0PoLX7/lOE0mixPBcV86L+E6V+LM64fOiOnb2xuTt18S9b0zmKndxvw==","signatures":[{"sig":"MEUCIQD4zSH+XPTEej8Xo5WVY2bOI09mjs4LOpcY7YshqfpS+QIgMv/iAgk3I5gmvUbfWrQ1nZhl/wiFSn8R4OJlA2RHub0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1342606,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj/kXRACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrXmw/+J11FWfK1lGv2AP527Y9kav30atAbnifMQKC1Fy8eOe4voW+1\r\n4zS7iQkOm7akO4UeNoXWJb3zWapEWdA4nj1ljv0RI7ObAoSTvIYpixgVeeaJ\r\nMEQGNGqMlSacbAEw5omP1TIERVKv0zovwKNkC99D1CR1pRW8uQUCm/Yn4lcl\r\n7eolbbUlkUMPVfDvizwEmSSYfIogHD4mREJLccCCg6asDimLoJBBVaUGjRDD\r\nqEj7E1guVj9kzX8N5TGKSQqEAYFE2Q9DDb6ypU714JubFlBTvCVFI6j6ljrr\r\nt/Xt4gJEoQI868kpBLAUh6fwU2XAHQ3oVIpFJlsAQ4VQf+zLIIVn9yjtdWg1\r\nKsNQGhWCJe4cWnoP0eJT88cErMdDb62RLxI7+m3FxqagdRQCPNboDsiMNHGd\r\nHOwc6F68QhW7ZQIaNBC8j0Ur8Upt6I/EUfFd0Ai0GimJtgakn98aJKaF+UN3\r\n0CKltzMDbTnpUZyoldxG4DDjeJYpYqs6BojwAqvmZnD64EgqLDqSQs/as99m\r\nROdVZYlDW3fPXQnwzsoAYm7i2zqssvN103RxOsDapirhEfpMuqHBF08gFsbf\r\n6uL70I6Pmgw0K6exnL6LN9tpiDsLiTKBQlWX8PPoObcZQL+Kxwncoism+FHx\r\nl0lYT+tMWwIU2g1eyUJw63i+dTTsgB0UUJk=\r\n=08nd\r\n-----END PGP SIGNATURE-----\r\n"},"main":"main.js","browser":{"./lib/node/font.js":"./lib/browser/font.js","./lib/node/load.js":"./lib/browser/load.js","./lib/node/write.js":"./lib/browser/write.js","./lib/node/create.js":"./lib/browser/create.js"},"gitHead":"d84aae7ff55530d5194529b844ede19ba89511b5","scripts":{"browserify":"browserify browser.js > canvas-plus.js"},"_npmUser":{"name":"jhuckaby","email":"jhuckaby@gmail.com"},"repository":{"url":"git+https://github.com/jhuckaby/canvas-plus.git","type":"git"},"_npmVersion":"9.3.1","description":"A universal library for manipulating images, built on canvas.","directories":{},"_nodeVersion":"18.14.0","dependencies":{"canvas":"2.9.0","crc-32":"1.2.0","omggif":"1.0.8","image-q":"1.1.1","pixl-cli":"^1.0.0","file-type":"11.0.0","pixl-perf":"^1.0.0","webp-wasm":"^1.0.2","exifreader":"4.9.1","image-size":"1.0.2","pixl-class":"^1.0.3","pixl-tools":"^1.0.0","pixl-request":"^2.0.0","blob-to-buffer":"1.2.6"},"_hasShrinkwrap":false,"devDependencies":{"browserify":"16.5.1","browser-process-hrtime":"0.1.2"},"_npmOperationalInternal":{"tmp":"tmp/pixl-canvas-plus_2.1.5_1677608400974_0.3488478788854614","host":"s3://npm-registry-packages"}},"2.1.6":{"name":"pixl-canvas-plus","version":"2.1.6","keywords":["image","canvas","rgba"],"author":{"name":"Joseph Huckaby","email":"jhuckaby@gmail.com"},"license":"MIT","_id":"pixl-canvas-plus@2.1.6","maintainers":[{"name":"jhuckaby","email":"jhuckaby@gmail.com"}],"homepage":"https://github.com/jhuckaby/canvas-plus","bugs":{"url":"https://github.com/jhuckaby/canvas-plus/issues"},"bin":{"pixl-canvas-plus":"cli.js"},"dist":{"shasum":"536762fc8cd02fac71c96efa0d933eea5706ebd4","tarball":"https://registry.npmjs.org/pixl-canvas-plus/-/pixl-canvas-plus-2.1.6.tgz","fileCount":36,"integrity":"sha512-so+4LqefklqC9FJGxhxAnWERzUkXmDwGqDrX7HDSOyVpMQZnF2CpRggkxhgMx6ne6F8O6d6YD5kURJunSo7GPg==","signatures":[{"sig":"MEUCIFiyxuspRhzoPyK4dIOXFh1OHLXGvefqAUSe1kb2utq9AiEA8qJCjDk5qpA3YtcMg5G93aXtNwMUAZcRONt8s634ub0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1348523,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkEA37ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrvAg/7BAEqzXwtY4TX9PLBPOnJNdK+T4R4oWYii/DFNR25zbSOn61q\r\nOO1bZy4dc9tUjXGQiUCIsYXQFAk6aptcA6K5JlMqdOewjPHqLGhLA5o09y23\r\ndxEz4h172qBZKtmSzNy0/1WyYRDOsNci2+HfF7rud9LFazw3g0x80zJHRJhD\r\nzo7hwedz+0X3WZNHJmAte0/ygO0tara6IjjVqhCZpUud2q25qOA5E9RxcXQe\r\nNlCTDNlcuk0tue8ssmpJOZrJWyn4uL9/Ukoz/5rSFEY0Q2E/TNId4Q2tJvpx\r\nOBO7QfTTGNpCryzah3msH8gBDizv5SHJM4KGWvqM3vDAAPj1YHymx12h3+yA\r\n8QCsSS7mvFhDkbSHTV3M1bqdbzBrDnZBo1edcrEvZr55d55a2zUzptLPBF4T\r\nRfP8J1kH73zxTLmLOr4BoEIDkNJfWNqKpsIHgQKSqgSpVzTRJpvdAwEvdRJr\r\nTC/sEdL8E1SXvEdEHv8F9jSAz9kw8AJitWwy2/OMbc5ZMmmWgmtrg9uqqQw3\r\np9kJlN4yCsFGkcZA2a8X3OqS8j6abLB2js9E04pKkQNqKWsYhbwrTKQiBHv3\r\nZuONzdc9WXrDR10vefeWIbL+JpZYW9v9+9nFA5EV3k/ziNUlcPxC7IFiLayW\r\nc6C7qvWKGeZymmUCD4Zr/2QeW2R5eOo3j+E=\r\n=WDoM\r\n-----END PGP SIGNATURE-----\r\n"},"main":"main.js","browser":{"./lib/node/font.js":"./lib/browser/font.js","./lib/node/load.js":"./lib/browser/load.js","./lib/node/write.js":"./lib/browser/write.js","./lib/node/create.js":"./lib/browser/create.js"},"gitHead":"b82e813d08cea373f81760efe798860a3f6b0567","scripts":{"browserify":"browserify browser.js > canvas-plus.js"},"_npmUser":{"name":"jhuckaby","email":"jhuckaby@gmail.com"},"repository":{"url":"git+https://github.com/jhuckaby/canvas-plus.git","type":"git"},"_npmVersion":"9.3.1","description":"A universal library for manipulating images, built on canvas.","directories":{},"_nodeVersion":"18.14.0","dependencies":{"canvas":"2.9.0","crc-32":"1.2.0","omggif":"1.0.8","image-q":"1.1.1","pixl-cli":"^1.0.0","file-type":"11.0.0","pixl-perf":"^1.0.0","webp-wasm":"^1.0.2","exifreader":"4.9.1","image-size":"1.0.2","pixl-class":"^1.0.3","pixl-tools":"^1.0.0","pixl-request":"^2.0.0","blob-to-buffer":"1.2.6"},"_hasShrinkwrap":false,"devDependencies":{"browserify":"16.5.1","browser-process-hrtime":"0.1.2"},"_npmOperationalInternal":{"tmp":"tmp/pixl-canvas-plus_2.1.6_1678773754752_0.216369792483881","host":"s3://npm-registry-packages"}},"2.1.7":{"name":"pixl-canvas-plus","version":"2.1.7","keywords":["image","canvas","rgba"],"author":{"name":"Joseph Huckaby","email":"jhuckaby@gmail.com"},"license":"MIT","_id":"pixl-canvas-plus@2.1.7","maintainers":[{"name":"jhuckaby","email":"jhuckaby@gmail.com"}],"homepage":"https://github.com/jhuckaby/canvas-plus","bugs":{"url":"https://github.com/jhuckaby/canvas-plus/issues"},"bin":{"pixl-canvas-plus":"cli.js"},"dist":{"shasum":"a35100241d0ca084c8a95b90a2d48ae3459919fa","tarball":"https://registry.npmjs.org/pixl-canvas-plus/-/pixl-canvas-plus-2.1.7.tgz","fileCount":36,"integrity":"sha512-/yILA1KnwsKbrh12cgM0xT0QX3g3ugc7jzwt8mVF+QhgFDDRR7gGhfqvNGsp8EweNgFGr1r3ruIpFCfoCQWV8A==","signatures":[{"sig":"MEUCIQD9dww1krKQDAArPNj/VZ9cm454Aje01cm7F3H+Y6vUVgIgERFrNAYKzmBexW/mzln2W3hGPItBdJbNLbW/TbGW8/Q=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1350645},"main":"main.js","browser":{"./lib/node/font.js":"./lib/browser/font.js","./lib/node/load.js":"./lib/browser/load.js","./lib/node/write.js":"./lib/browser/write.js","./lib/node/create.js":"./lib/browser/create.js"},"gitHead":"1cc4d2433207036fbb6f02a3b068b5ba729110ad","scripts":{"browserify":"browserify browser.js > canvas-plus.js"},"_npmUser":{"name":"jhuckaby","email":"jhuckaby@gmail.com"},"repository":{"url":"git+https://github.com/jhuckaby/canvas-plus.git","type":"git"},"_npmVersion":"9.3.1","description":"A universal library for manipulating images, built on canvas.","directories":{},"_nodeVersion":"18.14.0","dependencies":{"canvas":"2.9.0","crc-32":"1.2.0","omggif":"1.0.8","image-q":"1.1.1","pixl-cli":"^1.0.0","file-type":"11.0.0","pixl-perf":"^1.0.0","webp-wasm":"^1.0.2","exifreader":"4.21.1","image-size":"1.0.2","pixl-class":"^1.0.3","pixl-tools":"^1.0.0","pixl-request":"^2.0.0","blob-to-buffer":"1.2.6"},"_hasShrinkwrap":false,"devDependencies":{"browserify":"16.5.1","browser-process-hrtime":"0.1.2"},"_npmOperationalInternal":{"tmp":"tmp/pixl-canvas-plus_2.1.7_1710880669155_0.7877043044058571","host":"s3://npm-registry-packages"}},"2.1.8":{"name":"pixl-canvas-plus","version":"2.1.8","keywords":["image","canvas","rgba"],"author":{"name":"Joseph Huckaby","email":"jhuckaby@gmail.com"},"license":"MIT","_id":"pixl-canvas-plus@2.1.8","maintainers":[{"name":"jhuckaby","email":"jhuckaby@gmail.com"}],"homepage":"https://github.com/jhuckaby/canvas-plus","bugs":{"url":"https://github.com/jhuckaby/canvas-plus/issues"},"bin":{"pixl-canvas-plus":"cli.js"},"dist":{"shasum":"a5c5691d950828c9d0e022e2b0457343e315f511","tarball":"https://registry.npmjs.org/pixl-canvas-plus/-/pixl-canvas-plus-2.1.8.tgz","fileCount":36,"integrity":"sha512-DfilvVH8AcjNu27Hkmcnszc/CDh0zoWaPiWjDGSpItZbsLi3zXLX2+PcD6n+Mq6M30D3skzzkUs0aEWN4R6B8w==","signatures":[{"sig":"MEUCIH39fFzOjYlFhqnLhvW9WMMT7eLV4/jwg1+UqDL75CReAiEA98SVNh+FgQxkrt4Cz2oIUZ+DuP9f4vfinlIwD5LI1Go=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1411477},"main":"main.js","browser":{"./lib/node/font.js":"./lib/browser/font.js","./lib/node/load.js":"./lib/browser/load.js","./lib/node/write.js":"./lib/browser/write.js","./lib/node/create.js":"./lib/browser/create.js"},"gitHead":"ef0d1538eac230be3b965ddebee1254d2ed4e66c","scripts":{"browserify":"browserify browser.js > canvas-plus.js"},"_npmUser":{"name":"jhuckaby","email":"jhuckaby@gmail.com"},"repository":{"url":"git+https://github.com/jhuckaby/canvas-plus.git","type":"git"},"_npmVersion":"9.3.1","description":"A universal library for manipulating images, built on canvas.","directories":{},"_nodeVersion":"18.14.0","dependencies":{"canvas":"2.9.0","crc-32":"1.2.0","omggif":"1.0.8","image-q":"1.1.1","pixl-cli":"^1.0.0","file-type":"11.0.0","pixl-perf":"^1.0.0","webp-wasm":"^1.0.2","exifreader":"4.21.1","image-size":"1.0.2","pixl-class":"^1.0.3","pixl-tools":"^1.0.0","pixl-request":"^2.0.0","blob-to-buffer":"1.2.6"},"_hasShrinkwrap":false,"devDependencies":{"browserify":"16.5.1","browser-process-hrtime":"0.1.2"},"_npmOperationalInternal":{"tmp":"tmp/pixl-canvas-plus_2.1.8_1710881161010_0.522156485419744","host":"s3://npm-registry-packages"}},"2.1.9":{"name":"pixl-canvas-plus","version":"2.1.9","keywords":["image","canvas","rgba"],"author":{"name":"Joseph Huckaby","email":"jhuckaby@gmail.com"},"license":"MIT","_id":"pixl-canvas-plus@2.1.9","maintainers":[{"name":"jhuckaby","email":"jhuckaby@gmail.com"}],"homepage":"https://github.com/jhuckaby/canvas-plus","bugs":{"url":"https://github.com/jhuckaby/canvas-plus/issues"},"bin":{"pixl-canvas-plus":"cli.js"},"dist":{"shasum":"86417ef16dde39cdd9530b0ea12950e3f1931f54","tarball":"https://registry.npmjs.org/pixl-canvas-plus/-/pixl-canvas-plus-2.1.9.tgz","fileCount":36,"integrity":"sha512-EXky4XMqtEUud2Nisq/w/OPr/BvC5peKtNoWpRVybhAOeFfQKaDC4QLctZvnGORD0st/zStt+nvq9Dv/8h00iQ==","signatures":[{"sig":"MEUCIEhdUTtrLAsdftWIPFINZxf8vkOmBB6w0/OyqVk2lrWpAiEAmVaPlPheHAu/tAEmtfOF4127orEVm/VGXg16+9pEinU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1411478},"main":"main.js","browser":{"./lib/node/font.js":"./lib/browser/font.js","./lib/node/load.js":"./lib/browser/load.js","./lib/node/write.js":"./lib/browser/write.js","./lib/node/create.js":"./lib/browser/create.js"},"gitHead":"5b944f038280c17d27d18c1d7c9403b9d10170fb","scripts":{"browserify":"browserify browser.js > canvas-plus.js"},"_npmUser":{"name":"jhuckaby","email":"jhuckaby@gmail.com"},"repository":{"url":"git+https://github.com/jhuckaby/canvas-plus.git","type":"git"},"_npmVersion":"9.3.1","description":"A universal library for manipulating images, built on canvas.","directories":{},"_nodeVersion":"18.14.0","dependencies":{"canvas":"2.11.2","crc-32":"1.2.0","omggif":"1.0.8","image-q":"1.1.1","pixl-cli":"^1.0.0","file-type":"11.0.0","pixl-perf":"^1.0.0","webp-wasm":"^1.0.2","exifreader":"4.21.1","image-size":"1.0.2","pixl-class":"^1.0.3","pixl-tools":"^1.0.0","pixl-request":"^2.0.0","blob-to-buffer":"1.2.6"},"_hasShrinkwrap":false,"devDependencies":{"browserify":"16.5.1","browser-process-hrtime":"0.1.2"},"_npmOperationalInternal":{"tmp":"tmp/pixl-canvas-plus_2.1.9_1711059212052_0.8554480909583739","host":"s3://npm-registry-packages"}},"3.0.0":{"name":"pixl-canvas-plus","version":"3.0.0","keywords":["image","canvas","rgba"],"author":{"name":"Joseph Huckaby","email":"jhuckaby@gmail.com"},"license":"MIT","_id":"pixl-canvas-plus@3.0.0","maintainers":[{"name":"jhuckaby","email":"jhuckaby@gmail.com"}],"homepage":"https://github.com/jhuckaby/canvas-plus","bugs":{"url":"https://github.com/jhuckaby/canvas-plus/issues"},"bin":{"pixl-canvas-plus":"cli.js"},"dist":{"shasum":"bad3e847392269fef5997f4a44ff41109f41f45d","tarball":"https://registry.npmjs.org/pixl-canvas-plus/-/pixl-canvas-plus-3.0.0.tgz","fileCount":36,"integrity":"sha512-10up5ZenqwbX7oAiKIoAYRcPJdGW3gxnMpOtaj0CiYy7HZQjf5IoZFh+ueSspSAen8wbhXSn6N26bfRyC/CUeQ==","signatures":[{"sig":"MEQCIFxjrTtf3a7jyTRr/Ouh/vOF0DXWrSC0101vron4/PWlAiBw0Tn5/Q7nDXoQoUUxT9mSkLqLvmWa/CBADWYw5FLeAQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1415171},"main":"main.js","browser":{"./lib/node/font.js":"./lib/browser/font.js","./lib/node/load.js":"./lib/browser/load.js","./lib/node/write.js":"./lib/browser/write.js","./lib/node/create.js":"./lib/browser/create.js"},"gitHead":"fedd8aed2d8cadc22542941e2a5f0e9a13cb83d4","scripts":{"browserify":"browserify browser.js > canvas-plus.js"},"_npmUser":{"name":"jhuckaby","email":"jhuckaby@gmail.com"},"repository":{"url":"git+https://github.com/jhuckaby/canvas-plus.git","type":"git"},"_npmVersion":"10.9.2","description":"A universal library for manipulating images, built on canvas.","directories":{},"_nodeVersion":"22.13.1","dependencies":{"canvas":"3.2.3","crc-32":"1.2.0","omggif":"1.0.8","image-q":"1.1.1","pixl-cli":"^1.0.0","file-type":"11.0.0","pixl-perf":"^1.0.0","webp-wasm":"^1.0.2","exifreader":"4.21.1","image-size":"1.0.2","pixl-class":"^1.0.3","pixl-tools":"^2.0.0","pixl-request":"^2.0.0","blob-to-buffer":"1.2.6"},"_hasShrinkwrap":false,"devDependencies":{"browserify":"17.0.1","browser-process-hrtime":"0.1.2"},"_npmOperationalInternal":{"tmp":"tmp/pixl-canvas-plus_3.0.0_1779329231565_0.9788936859315327","host":"s3://npm-registry-packages-npm-production"}},"3.0.1":{"name":"pixl-canvas-plus","version":"3.0.1","keywords":["image","canvas","rgba"],"author":{"name":"Joseph Huckaby","email":"jhuckaby@gmail.com"},"license":"MIT","_id":"pixl-canvas-plus@3.0.1","maintainers":[{"name":"jhuckaby","email":"jhuckaby@gmail.com"}],"homepage":"https://github.com/jhuckaby/canvas-plus","bugs":{"url":"https://github.com/jhuckaby/canvas-plus/issues"},"bin":{"pixl-canvas-plus":"cli.js"},"dist":{"shasum":"d5149b425c1665a176a3ec6be7632ffab628c39f","tarball":"https://registry.npmjs.org/pixl-canvas-plus/-/pixl-canvas-plus-3.0.1.tgz","fileCount":36,"integrity":"sha512-WMR4BgnsSBual5Ditnme0mYwStaFR6fDbCAIYDX+CxKoOYm35febmnoCN6kvCwOGRX7JxGmRPBtF5KOXBB23DQ==","signatures":[{"sig":"MEUCIGe3XR0scg8WJbvIkNyfSjjhARl1cyW8MyeyHCqvdJ1hAiEAqmgUZA4LyAhYTJxkigKhZFs2ygx9NdPHlXVe6AqGnSg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1497124},"main":"main.js","browser":{"./lib/node/font.js":"./lib/browser/font.js","./lib/node/load.js":"./lib/browser/load.js","./lib/node/write.js":"./lib/browser/write.js","./lib/node/create.js":"./lib/browser/create.js"},"gitHead":"a6c31f969abf13e365b9646ec07f2b769e5ce7cd","scripts":{"browserify":"browserify browser.js > canvas-plus.js"},"_npmUser":{"name":"jhuckaby","email":"jhuckaby@gmail.com"},"repository":{"url":"git+https://github.com/jhuckaby/canvas-plus.git","type":"git"},"_npmVersion":"10.9.2","description":"A universal library for manipulating images, built on canvas.","directories":{},"_nodeVersion":"22.13.1","dependencies":{"canvas":"3.2.3","crc-32":"1.2.0","omggif":"1.0.8","image-q":"1.1.1","pixl-cli":"^1.0.0","file-type":"11.0.0","pixl-perf":"^1.0.0","webp-wasm":"^1.0.2","exifreader":"4.21.1","image-size":"1.0.2","pixl-class":"^1.0.3","pixl-tools":"^2.0.0","pixl-request":"^2.0.0","blob-to-buffer":"1.2.6"},"_hasShrinkwrap":false,"devDependencies":{"browserify":"17.0.1","browser-process-hrtime":"0.1.2"},"_npmOperationalInternal":{"tmp":"tmp/pixl-canvas-plus_3.0.1_1779329318269_0.3644639598639208","host":"s3://npm-registry-packages-npm-production"}},"3.0.2":{"name":"pixl-canvas-plus","version":"3.0.2","keywords":["image","canvas","rgba"],"author":{"name":"Joseph Huckaby","email":"jhuckaby@gmail.com"},"license":"MIT","_id":"pixl-canvas-plus@3.0.2","maintainers":[{"name":"jhuckaby","email":"jhuckaby@gmail.com"}],"homepage":"https://github.com/jhuckaby/canvas-plus","bugs":{"url":"https://github.com/jhuckaby/canvas-plus/issues"},"bin":{"pixl-canvas-plus":"cli.js"},"dist":{"shasum":"78f10783fc8a1166060e3e4e901ea0478b5b7eae","tarball":"https://registry.npmjs.org/pixl-canvas-plus/-/pixl-canvas-plus-3.0.2.tgz","fileCount":36,"integrity":"sha512-Z5MyJd7fPZrbAqsLm+k8Kit5KEU2j+KJ9TjaX3+URy7gIppK3kgJIi8X5pwcUSWaqBL6fbniMINdkr7WGKoPyg==","signatures":[{"sig":"MEQCIDxIHM4PahGnR8DvYdjHF0I3bQo+1EZHUmqeSl9i4TbNAiANQ730VFlDSXwbWXxSQnW6Djw+oKHdCSxBWuAFXrBiZg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1497124},"main":"main.js","browser":{"./lib/node/font.js":"./lib/browser/font.js","./lib/node/load.js":"./lib/browser/load.js","./lib/node/write.js":"./lib/browser/write.js","./lib/node/create.js":"./lib/browser/create.js"},"gitHead":"324de2d3a2910580ac514819ede6462a45e1c0d5","scripts":{"browserify":"browserify browser.js > canvas-plus.js"},"_npmUser":{"name":"jhuckaby","email":"jhuckaby@gmail.com"},"repository":{"url":"git+https://github.com/jhuckaby/canvas-plus.git","type":"git"},"_npmVersion":"10.9.2","description":"A universal library for manipulating images, built on canvas.","directories":{},"_nodeVersion":"22.13.1","dependencies":{"canvas":"3.2.3","crc-32":"1.2.0","omggif":"1.0.8","image-q":"1.1.1","pixl-cli":"^1.0.0","file-type":"11.0.0","pixl-perf":"^1.0.0","webp-wasm":"^1.0.2","exifreader":"4.39.0","image-size":"1.0.2","pixl-class":"^1.0.3","pixl-tools":"^2.0.0","pixl-request":"^2.0.0","blob-to-buffer":"1.2.6"},"_hasShrinkwrap":false,"devDependencies":{"browserify":"17.0.1","browser-process-hrtime":"0.1.2"},"_npmOperationalInternal":{"tmp":"tmp/pixl-canvas-plus_3.0.2_1780098046026_0.8619257950728301","host":"s3://npm-registry-packages-npm-production"}},"3.0.3":{"name":"pixl-canvas-plus","version":"3.0.3","keywords":["image","canvas","rgba"],"author":{"name":"Joseph Huckaby","email":"jhuckaby@gmail.com"},"license":"MIT","_id":"pixl-canvas-plus@3.0.3","maintainers":[{"name":"jhuckaby","email":"jhuckaby@gmail.com"}],"homepage":"https://github.com/jhuckaby/canvas-plus","bugs":{"url":"https://github.com/jhuckaby/canvas-plus/issues"},"bin":{"pixl-canvas-plus":"cli.js"},"dist":{"shasum":"ef4449a9fe1f1ce53b5ee4d93170381773803983","tarball":"https://registry.npmjs.org/pixl-canvas-plus/-/pixl-canvas-plus-3.0.3.tgz","fileCount":36,"integrity":"sha512-Ln7c4pPT3s1V+9EL9A5ymLZCSDFYKD6WibvJp/kAgE7MVs0vIthZA2iL8nv+ip2OAowKwDIS23IFrPoX4r7EKA==","signatures":[{"sig":"MEQCIFUz19TmzIhcw8N635kDyZgv6+GDn79n63aixE0ZRxujAiADuZVvHfFRzFsRAGjSw30pVjWCQK5qKLuEhIhooTkjzQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1641035},"main":"main.js","browser":{"./lib/node/font.js":"./lib/browser/font.js","./lib/node/load.js":"./lib/browser/load.js","./lib/node/write.js":"./lib/browser/write.js","./lib/node/create.js":"./lib/browser/create.js"},"gitHead":"d0945ad3cbb11215f991107d35603809601bde7c","scripts":{"browserify":"browserify browser.js > canvas-plus.js"},"_npmUser":{"name":"jhuckaby","email":"jhuckaby@gmail.com"},"repository":{"url":"git+https://github.com/jhuckaby/canvas-plus.git","type":"git"},"_npmVersion":"10.9.2","description":"A universal library for manipulating images, built on canvas.","directories":{},"_nodeVersion":"22.13.1","dependencies":{"canvas":"3.2.3","crc-32":"1.2.0","omggif":"1.0.8","image-q":"1.1.1","pixl-cli":"^1.0.0","file-type":"11.0.0","pixl-perf":"^1.0.0","webp-wasm":"^1.0.2","exifreader":"4.39.0","image-size":"1.0.2","pixl-class":"^1.0.3","pixl-tools":"^2.0.0","pixl-request":"^2.0.0","blob-to-buffer":"1.2.6"},"_hasShrinkwrap":false,"devDependencies":{"browserify":"17.0.1","browser-process-hrtime":"0.1.2"},"_npmOperationalInternal":{"tmp":"tmp/pixl-canvas-plus_3.0.3_1780098134724_0.8353055435268113","host":"s3://npm-registry-packages-npm-production"}},"3.0.4":{"name":"pixl-canvas-plus","version":"3.0.4","keywords":["image","canvas","rgba"],"author":{"name":"Joseph Huckaby","email":"jhuckaby@gmail.com"},"license":"MIT","_id":"pixl-canvas-plus@3.0.4","maintainers":[{"name":"jhuckaby","email":"jhuckaby@gmail.com"}],"homepage":"https://github.com/jhuckaby/canvas-plus","bugs":{"url":"https://github.com/jhuckaby/canvas-plus/issues"},"bin":{"pixl-canvas-plus":"cli.js"},"dist":{"shasum":"c4aa509918ba4a3949eedc53a0ff44a25c43bc64","tarball":"https://registry.npmjs.org/pixl-canvas-plus/-/pixl-canvas-plus-3.0.4.tgz","fileCount":36,"integrity":"sha512-IJRlXOaOMnI2wKmC0igAqHay+olNKPsxkzXoa7I+H3RVk5dElFo+Ju5vWtNlXCpkxjbZ2JZlpKDFeFmqkH66XQ==","signatures":[{"sig":"MEUCIH6fj9FKXOPaT/bv12GDmX9rTEoyVZb+Xp8vkoNPKV6YAiEA6nxnGPoWtvSK1hwHfkFv50x/RO5UrXrJu8z61xrNreY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1641035},"main":"main.js","browser":{"./lib/node/font.js":"./lib/browser/font.js","./lib/node/load.js":"./lib/browser/load.js","./lib/node/write.js":"./lib/browser/write.js","./lib/node/create.js":"./lib/browser/create.js"},"gitHead":"2239386645c133757c7139a135e4e9cde9db239d","scripts":{"browserify":"browserify browser.js > canvas-plus.js"},"_npmUser":{"name":"jhuckaby","email":"jhuckaby@gmail.com"},"repository":{"url":"git+https://github.com/jhuckaby/canvas-plus.git","type":"git"},"_npmVersion":"10.9.2","description":"A universal library for manipulating images, built on canvas.","directories":{},"_nodeVersion":"22.13.1","dependencies":{"canvas":"3.2.3","crc-32":"1.2.0","omggif":"1.0.8","image-q":"1.1.1","pixl-cli":"^1.0.0","file-type":"11.0.0","pixl-perf":"^1.0.0","webp-wasm":"^1.0.2","exifreader":"4.39.0","image-size":"1.0.2","pixl-class":"^1.0.3","pixl-tools":"^2.0.0","pixl-request":"^2.0.0","blob-to-buffer":"1.2.6"},"_hasShrinkwrap":false,"devDependencies":{"browserify":"17.0.1","browser-process-hrtime":"0.1.2"},"_npmOperationalInternal":{"tmp":"tmp/pixl-canvas-plus_3.0.4_1782060960089_0.005232044756807275","host":"s3://npm-registry-packages-npm-production"}},"3.0.5":{"name":"pixl-canvas-plus","version":"3.0.5","keywords":["image","canvas","rgba"],"author":{"name":"Joseph Huckaby","email":"jhuckaby@gmail.com"},"license":"MIT","_id":"pixl-canvas-plus@3.0.5","maintainers":[{"name":"jhuckaby","email":"jhuckaby@gmail.com"}],"homepage":"https://github.com/jhuckaby/canvas-plus","bugs":{"url":"https://github.com/jhuckaby/canvas-plus/issues"},"bin":{"pixl-canvas-plus":"cli.js"},"dist":{"shasum":"ca4139be0b866660c89080f8968d63f6ab2fff36","tarball":"https://registry.npmjs.org/pixl-canvas-plus/-/pixl-canvas-plus-3.0.5.tgz","fileCount":36,"integrity":"sha512-JQ1c8LkYPhae6MdnzcOLxxPcOqbwFHUqC0FM8fZv9uAO1cb3UomdmfSrJDJji2VBtt2U5eqyW/5z7YE4M9dkKg==","signatures":[{"sig":"MEYCIQCwgAFdFboAwblOEcEcBZLTVoEXp09YlIsHN/nJ83AHQAIhAJhByFbaY7mRpmPIy95yfnqi6z6GBoLHXcEheDckJ1bu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1641125},"main":"main.js","browser":{"./lib/node/font.js":"./lib/browser/font.js","./lib/node/load.js":"./lib/browser/load.js","./lib/node/write.js":"./lib/browser/write.js","./lib/node/create.js":"./lib/browser/create.js"},"gitHead":"9f813a4ea484909771bd6b8a921ecad9bd755f3a","scripts":{"browserify":"browserify browser.js > canvas-plus.js"},"_npmUser":{"name":"jhuckaby","email":"jhuckaby@gmail.com"},"repository":{"url":"git+https://github.com/jhuckaby/canvas-plus.git","type":"git"},"_npmVersion":"11.16.0","description":"A universal library for manipulating images, built on canvas.","directories":{},"_nodeVersion":"24.17.0","allowScripts":{"canvas@3.2.3":true,"exifreader@4.39.0":true},"dependencies":{"canvas":"3.2.3","crc-32":"1.2.0","omggif":"1.0.8","image-q":"1.1.1","pixl-cli":"^1.0.0","file-type":"11.0.0","pixl-perf":"^1.0.0","webp-wasm":"^1.0.2","exifreader":"4.39.0","image-size":"1.0.2","pixl-class":"^1.0.3","pixl-tools":"^2.0.0","pixl-request":"^2.0.0","blob-to-buffer":"1.2.6"},"_hasShrinkwrap":false,"devDependencies":{"browserify":"17.0.1","browser-process-hrtime":"0.1.2"},"_npmOperationalInternal":{"tmp":"tmp/pixl-canvas-plus_3.0.5_1782929335437_0.022895438604290996","host":"s3://npm-registry-packages-npm-production"}},"4.0.0":{"name":"pixl-canvas-plus","version":"4.0.0","description":"A universal library for manipulating images, built on canvas.","author":{"name":"Joseph Huckaby","email":"jhuckaby@gmail.com"},"homepage":"https://github.com/jhuckaby/canvas-plus","license":"MIT","main":"main.js","bin":{"pixl-canvas-plus":"cli.js"},"repository":{"type":"git","url":"git+https://github.com/jhuckaby/canvas-plus.git"},"bugs":{"url":"https://github.com/jhuckaby/canvas-plus/issues"},"keywords":["image","canvas","rgba"],"dependencies":{"blob-to-buffer":"1.2.6","canvas":"3.2.3","crc-32":"1.2.0","exifreader":"4.40.1","file-type":"11.0.0","image-q":"1.1.1","omggif":"1.0.8","pixl-class":"^1.0.3","pixl-cli":"^1.0.0","pixl-perf":"^1.0.0","pixl-request":"^2.0.0","pixl-tools":"^2.0.0","probe-image-size":"7.3.0","webp-wasm":"^1.0.2"},"devDependencies":{"browser-process-hrtime":"0.1.2","buffer":"6.0.3","esbuild":"0.28.2","events":"3.3.0","pako":"3.0.1","process":"0.11.10","util":"0.12.5"},"browser":{"./lib/node/create.js":"./lib/browser/create.js","./lib/node/font.js":"./lib/browser/font.js","./lib/node/load.js":"./lib/browser/load.js","./lib/node/write.js":"./lib/browser/write.js"},"scripts":{"build":"node scripts/build-browser.js"},"allowScripts":{"canvas@3.2.3":true,"exifreader@4.40.1":true,"esbuild@0.28.2":true},"gitHead":"e96e76eafd189f5413bfc856fa001702f843f86c","_id":"pixl-canvas-plus@4.0.0","_nodeVersion":"24.17.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-VxSA6TqlxLeluZLZzq+aBG1puHeHRd1y56vIPBM4fRaz5resqQpJp6Bd1I9j5RCUgDh45/sOTSjBtPm6qObDAA==","shasum":"20764696b3047386f932921eeb5a53748e9c92a9","tarball":"https://registry.npmjs.org/pixl-canvas-plus/-/pixl-canvas-plus-4.0.0.tgz","fileCount":39,"unpackedSize":1330645,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDu42GoHSj4bbvVqvKovbdnv1zG/y0h6cwkxNQ91pXp5AIhANgvbeE05IKrwj7fMSnxHHPTfw0p8CDAfH1IPEwh852G"}]},"_npmUser":{"name":"jhuckaby","email":"jhuckaby@gmail.com"},"directories":{},"maintainers":[{"name":"jhuckaby","email":"jhuckaby@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pixl-canvas-plus_4.0.0_1786647444686_0.004576523196924365"},"_hasShrinkwrap":false}},"time":{"created":"2018-05-09T06:03:26.765Z","modified":"2026-08-13T18:57:28.686Z","1.0.0":"2018-05-09T06:03:28.131Z","1.0.1":"2018-05-17T03:30:49.296Z","1.0.2":"2018-07-06T21:14:31.959Z","2.0.0":"2019-01-21T04:44:53.518Z","2.0.1":"2019-01-23T05:56:01.735Z","2.0.4":"2019-05-04T04:18:07.915Z","2.0.6":"2019-08-27T03:11:54.185Z","2.0.7":"2020-05-16T21:28:53.538Z","2.0.8":"2020-11-24T04:48:05.526Z","2.0.9":"2021-02-04T00:13:18.095Z","2.0.10":"2021-03-07T21:10:59.216Z","2.0.11":"2021-05-08T03:19:20.052Z","2.0.12":"2022-02-02T06:10:02.540Z","2.0.13":"2022-02-03T05:15:07.715Z","2.0.14":"2022-02-06T05:58:59.739Z","2.0.15":"2022-02-08T00:05:52.128Z","2.0.16":"2022-02-09T05:32:40.317Z","2.0.17":"2022-02-17T04:20:22.879Z","2.0.18":"2022-03-21T05:46:32.240Z","2.0.19":"2022-03-27T16:38:52.910Z","2.0.20":"2022-05-26T19:03:52.075Z","2.1.0":"2023-02-26T06:38:10.145Z","2.1.1":"2023-02-26T19:44:21.078Z","2.1.2":"2023-02-28T06:10:26.292Z","2.1.3":"2023-02-28T17:04:26.563Z","2.1.4":"2023-02-28T18:04:48.202Z","2.1.5":"2023-02-28T18:20:01.274Z","2.1.6":"2023-03-14T06:02:35.012Z","2.1.7":"2024-03-19T20:37:49.384Z","2.1.8":"2024-03-19T20:46:01.169Z","2.1.9":"2024-03-21T22:13:32.299Z","3.0.0":"2026-05-21T02:07:11.762Z","3.0.1":"2026-05-21T02:08:38.467Z","3.0.2":"2026-05-29T23:40:46.212Z","3.0.3":"2026-05-29T23:42:14.909Z","3.0.4":"2026-06-21T16:56:00.259Z","3.0.5":"2026-07-01T18:08:55.645Z","4.0.0":"2026-08-13T18:57:24.850Z"},"bugs":{"url":"https://github.com/jhuckaby/canvas-plus/issues"},"author":{"name":"Joseph Huckaby","email":"jhuckaby@gmail.com"},"license":"MIT","homepage":"https://github.com/jhuckaby/canvas-plus","keywords":["image","canvas","rgba"],"repository":{"type":"git","url":"git+https://github.com/jhuckaby/canvas-plus.git"},"description":"A universal library for manipulating images, built on canvas.","maintainers":[{"name":"jhuckaby","email":"jhuckaby@gmail.com"}],"readme":"# Overview\n\nCanvasPlus is a universal Node.js and browser library, which adds image processing capabilities onto the [HTML5 Canvas API](https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API).  In Node.js we rely on the amazing [canvas](https://www.npmjs.com/package/canvas) module, which is built on the [Cairo](https://www.cairographics.org/) graphics library.  In the browser we simply extend (well, wrap) the native canvas.\n\nCheck out our [live demo playground](https://jhuckaby.github.io/canvas-plus-playground/) to try out the library in your favorite browser.\n\n## Features\n\n- Load images from buffers, files or URLs\n- Resize with special modes including cover, contain, and letterbox\n- Render text with extra features\n\t- Multi-line, paragraph text\n\t- Custom character spacing and line spacing\n\t- Word-wrap\n\t- Auto-scale to fit line or paragraph\n- Quantization into indexed mode for PNGs and GIFs\n\t- Optional dithering\n\t- Super-fast quantize mode\n- Curves\n\t- Similar to Adobe Photoshop's Curves filter\n\t- Optionally apply different curves to each channel\n\t- Macro functions including Posterize, Solarize, Invert, Gamma, Sepia, etc.\n- Adjust hue, saturation, brightness, contrast and color temperature\n- Normalize (Auto-Enhance)\n- Generate histogram data\n- Access EXIF Metadata\n- Auto-Orient\n- Convolution Kernel\n\t- Macro functions including Emboss, Find Edges, Blur, Gaussian Blur, Sharpen\n- Crop images\n\t- Manual or automatic based on corner pixel\n- Rotation and flip horizontal / vertical\n- Read/Write JPEG, PNG, GIF and WebP images\n\t- Full support for indexed palette PNGs and GIFs\n\t- Full support for alpha PNGs, even indexed alpha\n\t- Full support for alpha WebP images.\n\n## Why\n\nThere are already some extremely cool image processing libraries out there.  I played with several, but none of them provided all the features I needed.  Specifically, I needed fast JPEG load and save, fast resize, TrueType / OpenType font support, advanced text rendering features like word wrap and auto-scale, quantization to 8-bit indexed mode with dithering, and curves.  I also wanted a universal library that worked in the browser as well as Node.js.  That being said, I want to recommend some amazing free libraries that you should absolutely check out:\n\n| Library | Notes |\n|---------|-------|\n| [LWIP](https://github.com/EyalAr/lwip) | Very nice, fast engine with a clean API.  Only missing text rendering, curves, and 8-bit quantization. |\n| [JIMP](https://github.com/oliver-moran/jimp) | Incredible pure-JS engine that does just about everything.  However, JPEG load/save and resize are too slow for me.  Also, no TrueType / OpenType font support, and there are some licensing issues.  Otherwise this is very, very cool. |\n| [Sharp](https://github.com/lovell/sharp) | Very fast (uses [libvips](https://github.com/jcupitt/libvips)), and cool SVG integration.  Missing text rendering, curves, 8-bit quantization, and browser support. |\n| [GM](https://github.com/aheckmann/gm) | I love this library, but it actually just shells out to the command-line GraphicsMagick/ImageMagick binary, so there are some performance concerns.  Also, no advanced text features, no curves, and no browser support. |\n\n## Table of Contents\n\n<!-- toc -->\n- [Usage](#usage)\n\t* [Node.js](#nodejs)\n\t* [Browser](#browser)\n\t* [Creating](#creating)\n\t* [Loading](#loading)\n\t* [Saving](#saving)\n\t* [Errors](#errors)\n\t* [Logging](#logging)\n- [API](#api)\n\t* [General](#general)\n\t\t+ [create](#create)\n\t\t+ [load](#load)\n\t\t\t- [Auto-Orient](#auto-orient)\n\t\t\t- [loadRemote](#loadremote)\n\t\t+ [write](#write)\n\t\t+ [clone](#clone)\n\t* [Filters](#filters)\n\t\t+ [adjust](#adjust)\n\t\t+ [blur](#blur)\n\t\t+ [border](#border)\n\t\t+ [composite](#composite)\n\t\t+ [convolve](#convolve)\n\t\t+ [crop](#crop)\n\t\t+ [curves](#curves)\n\t\t+ [desaturate](#desaturate)\n\t\t+ [draw](#draw)\n\t\t+ [emboss](#emboss)\n\t\t+ [expand](#expand)\n\t\t+ [exposure](#exposure)\n\t\t+ [findEdges](#findedges)\n\t\t+ [flatten](#flatten)\n\t\t+ [gamma](#gamma)\n\t\t+ [gaussianBlur](#gaussianblur)\n\t\t+ [invert](#invert)\n\t\t+ [lighting](#lighting)\n\t\t+ [mask](#mask)\n\t\t+ [normalize](#normalize)\n\t\t+ [opacity](#opacity)\n\t\t+ [posterize](#posterize)\n\t\t+ [quantize](#quantize)\n\t\t+ [quantizeFast](#quantizefast)\n\t\t+ [resize](#resize)\n\t\t+ [sepia](#sepia)\n\t\t+ [sharpen](#sharpen)\n\t\t+ [solarize](#solarize)\n\t\t+ [temperature](#temperature)\n\t\t+ [text](#text)\n\t\t\t- [Fonts](#fonts)\n\t\t\t- [Text Overflow](#text-overflow)\n\t\t+ [threshold](#threshold)\n\t\t+ [transform](#transform)\n\t\t+ [trim](#trim)\n\t* [Accessors](#accessors)\n\t\t+ [getLastError](#getlasterror)\n\t\t+ [getMetrics](#getmetrics)\n\t\t+ [getPerf](#getperf)\n\t\t+ [getDimensions](#getdimensions)\n\t\t+ [getEXIF](#getexif)\n\t\t+ [getCanvas](#getcanvas)\n\t\t+ [getContext](#getcontext)\n\t\t+ [getPixels](#getpixels)\n\t\t+ [getPalette](#getpalette)\n\t\t+ [get](#get)\n\t\t+ [width](#width)\n\t\t+ [height](#height)\n\t* [Misc](#misc)\n\t\t+ [set](#set)\n\t\t+ [clearLastError](#clearlasterror)\n\t\t+ [attachLogAgent](#attachlogagent)\n\t\t+ [importImage](#importimage)\n\t\t+ [importCanvas](#importcanvas)\n\t\t+ [reset](#reset)\n\t\t+ [render](#render)\n\t\t+ [histogram](#histogram)\n\t\t+ [hash](#hash)\n\t* [Modes](#modes)\n\t* [Channels](#channels)\n\t* [Gravity](#gravity)\n\t* [Anti-Aliasing](#anti-aliasing)\n\t* [Clipping](#clipping)\n\t* [Parameters](#parameters)\n\t\t+ [Node Parameters](#node-parameters)\n\t\t+ [Browser Parameters](#browser-parameters)\n- [Development](#development)\n- [Acknowledgments](#acknowledgments)\n- [License](#license)\n\n# Usage\n\n## Node.js\n\nUse [npm](https://www.npmjs.com/) to install the module:\n\n```\nnpm install pixl-canvas-plus\n```\n\nPlease note that the [canvas](https://www.npmjs.com/package/canvas) module dependency is a binary compiled library, which depends on [Cairo](https://www.cairographics.org/) being preinstalled on your machine.  See their [installation wiki](https://github.com/Automattic/node-canvas/wiki) for assistance.  That being said, [canvas](https://www.npmjs.com/package/canvas) v2.x comes with precompiled binaries for macOS, Windows and Linux, so it might just slip right in.\n\nHere is a simple usage example:\n\n```js\nconst CanvasPlus = require('pixl-canvas-plus');\nlet canvas = new CanvasPlus();\n\ncanvas.load( 'waterfall.jpg', function(err) {\n\tif (err) throw err;\n\t\n\tcanvas.resize({\n\t\t\"width\": 640,\n\t\t\"height\": 480,\n\t\t\"mode\": \"fit\"\n\t});\n\t\n\tcanvas.adjust({\n\t\t\"brightness\": -20,\n\t\t\"contrast\": 20\n\t});\n\t\n\tcanvas.write({\"format\":\"jpeg\", \"quality\":90}, function(err, buf) {\n\t\tif (err) throw err;\n\t\t\n\t\t// 'buf' will be a binary buffer containing final image...\n\t\trequire('fs').writeFileSync('my_image.jpg', buf);\n\t});\n\t\n});\n```\n\n## Browser\n\nFor the browser we use the native built-in [HTML5 Canvas API](https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API), and there are no runtime dependencies.  Simply download and host this pre-built file (compiled using [esbuild](https://esbuild.github.io/)) on your own web server:\n\n```\nhttps://raw.githubusercontent.com/jhuckaby/canvas-plus/master/canvas-plus.js\n```\n\nThis will expose a global `CanvasPlus` class in the window object.  Here is how to use it:\n\n```html\n<script src=\"canvas-plus.js\"></script>\n<script>\n\tlet canvas = new CanvasPlus();\n\t\n\tcanvas.load( 'waterfall.jpg', function(err) {\n\t\tif (err) throw err;\n\t\t\n\t\tcanvas.resize({\n\t\t\t\"width\": 640,\n\t\t\t\"height\": 480,\n\t\t\t\"mode\": \"fit\"\n\t\t});\n\t\t\n\t\tcanvas.adjust({\n\t\t\t\"brightness\": -20,\n\t\t\t\"contrast\": 20\n\t\t});\n\t\t\n\t\tcanvas.write({\"format\":\"jpeg\",\"quality\":90}, function(err, buf) {\n\t\t\tif (err) throw err;\n\t\t\t\n\t\t\t// 'buf' will be a binary buffer containing final image...\n\t\t\tlet blob = new Blob( [ buf ], { type: \"image/jpeg\" } );\n\t\t\tlet object_url = URL.createObjectURL( blob );\n\t\t\t\n\t\t\t// insert new image into DOM\n\t\t\tlet img = new Image();\n\t\t\timg.src = object_url;\n\t\t\tdocument.body.appendChild( img );\n\t\t});\n\t\t\n\t});\n</script>\n```\n\n## Creating\n\nTo create a blank canvas, and optionally fill with a background color, you can pass arguments to the constructor, like this:\n\n```js\nlet canvas = new CanvasPlus( 640, 480 );\n```\n\nOr with an optional background color:\n\n```js\nlet canvas = new CanvasPlus( 640, 480, \"#FF0000\" );\n```\n\nOr you can use the explicit [create()](#create) method:\n\n```js\nlet canvas = new CanvasPlus();\ncanvas.create({\n\twidth: 640,\n\theight: 480,\n\tbackground: \"#FF0000\"\n});\n```\n\nThe background color can be any CSS-compatible color string, including RGBA, e.g. `rgba(255, 0, 0, 0.5)`.\n\n## Loading\n\nYou can load images from a variety of sources, including buffers, files and URLs.  JPEGs, PNGs, GIFs and WebP are supported, and possibly others depending on your environment:\n\n| Environment | Sources | Image Formats |\n|-------------|---------|---------------|\n| **Node.js** | Buffer, File Path, URL | JPEG, PNG, GIF, WebP |\n| **Browser** | ArrayBuffer, File, Blob, URL | JPEG, PNG, GIF, BMP, WebP |\n\nTo load an image, pass the source (e.g. file path, URL) to the [load()](#load) method.  Please note that this is an asynchronous call, so you need to provide a callback, or you can use the promise / async / await pattern with Node 8+.  Example with callback:\n\n```js\nlet canvas = new CanvasPlus();\n\ncanvas.load( 'waterfall.jpg', function(err) {\n\tif (err) throw err;\n});\n```\n\nOr with Node 8+:\n\n```js\ntry {\n\tawait canvas.load( 'waterfall.jpg' );\n}\ncatch (err) {\n\t// handle error here\n}\n```\n\nIn Node.js this example would look for a `waterfall.jpg` file on disk in the current directory.  In the browser this would be treated as a URL to `waterfall.jpg` relative to the current page.\n\nNote that loading images in the browser requires that the file is hosted on the same domain as the page, or is hosted on a server that sends back proper [CORS headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS).  However, if you need to load an image from a 3rd party URL that does not support CORS, you can use the special [loadRemote()](#loadremote) method.  This works well enough, but due to browser security restrictions we will not have access to the raw binary bytes, so features like [EXIF data](#getexif) and [Auto-Orient](#auto-orient) are not available.\n\n## Saving\n\nTo save the contents of your canvas to a binary image format, use the [write()](#write) method.  This will compress the image into a JPEG, PNG or GIF, and provide you with a [Buffer](https://nodejs.org/api/buffer.html) object.  Please note that this is an asynchronous call, so you need to provide a callback, or you can use the promise / async / await pattern with Node 8+.  Example with callback:\n\n```js\ncanvas.write({\"format\":\"jpeg\", \"quality\":90}, function(err, buf) {\n\tif (err) throw err;\n\t\n\t// 'buf' will be a binary buffer containing final image\n});\n```\n\nOr with async/await:\n\n```js\ntry {\n\tlet buf = await canvas.write({\"format\":\"jpeg\", \"quality\":90});\n\t// 'buf' will be a binary buffer containing final image\n}\ncatch (err) {\n\t// handle error here\n}\n```\n\nThe `format` property should be one of `jpeg`, `png`, `gif` or `webp`.  The `quality` property is only used for JPEGs and WebP, and should be a number from `0` to `100`.\n\nNote that in the browser the buffer is provided using the [buffer](https://www.npmjs.com/package/buffer) module, which is is a subclass of [Uint8Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array).  So there is no need to explicitly convert to typed array -- just use the buffer as you would a native Uint8Array.\n\n## Errors\n\nAll filter methods are synchronous, so they do not follow the callback pattern.  So by default all filter methods do not throw (however you can enable this behavior if you want, see below).  Instead, they set an internal error state which you can query after the fact.  Example:\n\n```js\ncanvas.adjust({\n\t\"brightness\": -20,\n\t\"contrast\": 20\n});\nif (canvas.getLastError()) {\n\t// an error occurred\n\tlet err = canvas.getLastError();\n}\n```\n\nThis works even if you chain multiple filter calls together.  CanvasPlus will \"abort\" the chain on the first error.  Example:\n\n```js\ncanvas.desaturate().normalize().solarize().sepia().rotate(45);\n\nif (canvas.getLastError()) {\n\t// an error occurred\n\tlet err = canvas.getLastError();\n}\n```\n\nIf you would prefer to use try/catch, you can enable `throw` mode by calling [set()](#set) before running any filters:\n\n```js\ncanvas.set('throw', true);\n\ntry {\n\tcanvas.adjust({\n\t\t\"brightness\": -20,\n\t\t\"contrast\": 20\n\t});\n}\ncatch (err) {\n\t// an error occurred\n}\n```\n\n## Logging\n\nTo enable basic debug logging, use the [set()](#set) method to enable the `debug` parameter.  Example:\n\n```js\ncanvas.set('debug', true);\n```\n\nExample debug log, which is emitted using `console.log()` (and `console.error()` for errors):\n\n```\n[DEBUG] Setting property: debug: true\n[DEBUG] Loading image data from file: 640x480.jpg \n[DEBUG] Loading image from buffer {\"size\":296673}\n[DEBUG] Image ping: {\"height\":480,\"width\":640,\"type\":\"jpg\"}\n[DEBUG] Setting property: width: 640 \n[DEBUG] Setting property: height: 480 \n[DEBUG] Setting property: format: jpg \n[DEBUG] Setting property: mode: image \n[DEBUG] Setting property: origWidth: 640 \n[DEBUG] Setting property: origHeight: 480 \n[DEBUG] Setting property: origFormat: jpg \n[DEBUG] Image load complete \n[DEBUG] Resizing image to target size: 320x240 {\"mode\":\"Fit\",\"gravity\":\"center\",\"background\":\"\",\"orig_width\":640,\"orig_height\":480,\"target_width\":320,\"target_height\":240,\"dest_width\":320,\"dest_height\":240,\"canvas_width\":320,\"canvas_height\":240,\"x\":0,\"y\":0}\n[DEBUG] Setting property: width: 320 \n[DEBUG] Setting property: height: 240 \n[DEBUG] Creating new canvas: 320x240 {\"background\":\"(transparent)\"}\n[DEBUG] Setting property: mode: rgba \n[DEBUG] Canvas created successfully \n[DEBUG] Image resize complete \n[DEBUG] Adjusting image {\"brightness\":-20,\"contrast\":20,\"hue\":0,\"saturation\":0}\n[DEBUG] Image adjustment complete \n[DEBUG] Setting property: file: out.png \n[DEBUG] Setting property: format: png \n[DEBUG] Compressing image to format: png \n[DEBUG] Compressing into 32-bit PNG {\"compression\":9,\"filter\":\"PNG_ALL_FILTERS\"}\n[DEBUG] PNG compression complete \n[DEBUG] Image compression complete {\"size\":165279}\n[DEBUG] Saving to file: out.png \n[DEBUG] Image write complete\n```\n\nIn Node.js, you can attach a log agent compatible with our [pixl-logger](https://www.npmjs.com/package/pixl-logger) module, or write your own that implements the interface.  Example of the former:\n\n```js\nconst Logger = require('pixl-logger');\nlet columns = ['hires_epoch', 'date', 'hostname', 'component', 'category', 'code', 'msg', 'data'];\nlet logger = new Logger( 'logs/debug.log', columns );\n\ncanvas.attachLogAgent( logger );\n```\n\nExample custom logger implementation:\n\n```js\nlet logger = {\n\tdebug: function(level, msg, data) {\n\t\tif (data) msg += \" (\" + JSON.stringify(data) + \")\";\n\t\tconsole.log('[DEBUG]['+level+'] ' + msg);\n\t},\n\terror: function(code, msg, data) {\n\t\tif (data) msg += \" (\" + JSON.stringify(data) + \")\";\n\t\tconsole.log('[ERROR]['+code+'] ' + msg);\n\t}\n};\n\ncanvas.attachLogAgent( logger );\n```\n\n# API\n\n## General\n\n### create\n\nThe `create()` method creates a new blank canvas, or replaces one if it already exists.  It accepts an object containing the following properties:\n\n| Property Name | Type | Description |\n|---------------|------|-------------|\n| `width` | Integer | **(Required)** Canvas width in pixels. |\n| `height` | Integer | **(Required)** Canvas height in pixels. |\n| `background` | String | Optional background color (any CSS color string). |\n\nExample use:\n\n```js\ncanvas.create({\n\twidth: 640,\n\theight: 480,\n\tbackground: \"#FF0000\"\n});\n```\n\nThe background color can be any CSS-compatible color string, including RGBA, e.g. `rgba(255, 0, 0, 0.5)`.  If omitted, the canvas is initialized to transparent black.\n\nCanvases are always created in 32-bit RGBA mode.\n\n### load\n\nThe `load()` method loads an image into CanvasPlus.  It accepts buffers, files and URLs.  For image formats, JPEGs, PNGs, GIFs and WebP are supported, and possibly others depending on your environment.  Please note that this is an asynchronous call, so you need to provide a callback as the 2nd argument.  Example use:\n\n```js\ncanvas.load( 'waterfall.jpg', function(err) {\n\tif (err) throw err;\n});\n```\n\nIn Node.js this example would look for a `waterfall.jpg` file on disk in the current directory.  In the browser this would be treated as a URL to `waterfall.jpg` relative to the current page.\n\nAlternatively you can import an existing canvas using [importCanvas()](#importcanvas), or an image object using [importImage()](#importimage).\n\n#### Auto-Orient\n\nBy default, CanvasPlus will automatically orient (rotate) your image on load, so it is always right-side up.  This is accomplished by detecting the image's [EXIF data](https://en.wikipedia.org/wiki/Exif), if present, and reading the special orientation flag.  Many digital cameras do not fix image rotation when shots are taken, and instead simply include an EXIF flag in the files, indicating the camera's orientation.\n\nIf you do not want this behavior for some reason, you can disable the feature by calling [set()](#set) before loading your image, and disabling the `autoOrient` parameter.  Example:\n\n```js\nlet canvas = new CanvasPlus();\ncanvas.set('autoOrient', false);\n\ncanvas.load( 'waterfall.jpg', function(err) {\n\tif (err) throw err;\n});\n```\n\n#### loadRemote\n\nThe `loadRemote()` method is a special, browser-only API, which allows you to load 3rd party image URLs.  That is, images that are hosted on 3rd party domains, and do not provide proper [CORS headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS).  Example use:\n\n```js\nlet url = \"https://upload.wikimedia.org/wikipedia/commons/thumb/6/61/HTML5_logo_and_wordmark.svg/1024px-HTML5_logo_and_wordmark.svg.png\";\n\ncanvas.loadRemote( url, function(err) {\n\tif (err) throw err;\n});\n```\n\nNote that due to browser security restrictions we have no access to the raw binary bytes, so features like [EXIF data](#getexif) and [Auto-Orient](#auto-orient) are not available when using `loadRemote()`.\n\n### write\n\nThe `write()` method will compress your canvas into a JPEG, PNG, GIF or WebP, and provide you with a [Buffer](https://nodejs.org/api/buffer.html) object.  Please note that this is an asynchronous call, so you need to provide a callback.\n\n```js\ncanvas.write({\"format\":\"jpeg\", \"quality\":90}, function(err, buf) {\n\tif (err) throw err;\n\t\n\t// 'buf' will be a binary buffer containing final image\n});\n```\n\nThe `format` property should be one of `jpeg`, `png`, `gif` or `webp`.  The `quality` property is only used for JPEGs and WebP, and should be a number from `0` to `100`.\n\nNote that in the browser the buffer is provided using the [buffer](https://www.npmjs.com/package/buffer) module, which is is a subclass of [Uint8Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array). So there is no need to explicitly convert to typed array.  Just use the buffer as you would a native Uint8Array.\n\n### clone\n\nThe `clone()` method makes a copy of your canvas, including the raw pixel data, settings and all.  This is a synchronous call, and the new cloned object is returned.  Example use:\n\n```js\nlet copy = canvas.clone();\n```\n\n## Filters\n\nAll filter methods are synchronous, and do not require a callback.  You can also chain them together, like this:\n\n```js\ncanvas.desaturate().brightness(-15).contrast(30).invert();\n```\n\n### adjust\n\n**Live Demo:** [Adjust Brightness/Contrast](https://jhuckaby.github.io/canvas-plus-playground/?t=load/eyJpbWFnZSI6IndhdGVyZmFsbC5qcGcifQ%3D%3D&t=resize/eyJ3aWR0aCI6NjQwLCJoZWlnaHQiOjQ4MCwibW9kZSI6ImZpdCJ9&t=adjust/eyJicmlnaHRuZXNzIjotMTUsImNvbnRyYXN0IjozMH0%3D&f=png)\n\nThe `adjust()` method allows you to adjust the image hue, saturation, brightness, and/or contrast.  It accepts an object containing the following properties:\n\n| Property Name | Type | Description |\n|---------------|------|-------------|\n| `hue` | Integer | Adjust hue (-360 to 360). |\n| `saturation` | Integer | Adjust saturation (-255 to 255). |\n| `brightness` | Integer | Adjust brightness (-255 to 255). |\n| `contrast` | Integer | Adjust contrast (-255 to 255). |\n| `clip` | Object | Optional clipping rectangle (see [Clipping](#clipping) below). |\n\nExample use:\n\n```js\ncanvas.adjust({\n\t\"brightness\": -15,\n\t\"contrast\": 30\n});\n```\n\nThe following method shortcuts are provided for convenience:\n\n| Method Name | Example |\n|-------------|---------|\n| `hue` | `canvas.hue( 180 );` |\n| `saturation` | `canvas.saturation( -128 );` |\n| `brightness` | `canvas.brightness( 64 );` |\n| `contrast` | `canvas.contrast( 32 );` |\n\n**Note**: If you want to completely desaturate an image, check out the [desaturate()](#desaturate) filter below, as it is considerably faster than using `adjust()`.\n\n### blur\n\n**Live Demo:** [Blur](https://jhuckaby.github.io/canvas-plus-playground/?t=load/eyJpbWFnZSI6IndhdGVyZmFsbC5qcGcifQ%3D%3D&t=resize/eyJ3aWR0aCI6NjQwLCJoZWlnaHQiOjQ4MCwibW9kZSI6ImZpdCJ9&t=blur/eyJhbW91bnQiOjV9&f=png)\n\nThe `blur()` method applies a simple [box blur](https://en.wikipedia.org/wiki/Box_blur) to your image, using a custom [convolution kernel](#convolve).  This is a fast blur filter, but isn't particularly high quality.  It accepts an object containing the following properties:\n\n| Property Name | Type | Description |\n|---------------|------|-------------|\n| `amount` | Integer | **(Required)** Blur amount (2 to 100). |\n| `edges` | String | How to calculate out-of-bounds pixels, can be one of `repeat`, `wrap`, `mirror` or `discard` (case-insensitive).  Defaults to `repeat`. |\n| `channels` | String | Which channels to apply the filter to, defaults to `rgba`.  See [Channels](#channels). |\n| `clip` | Object | Optional clipping rectangle (see [Clipping](#clipping) below). |\n\nExample use:\n\n```js\ncanvas.blur({\n\t\"amount\": 5\n});\n```\n\n**See Also**: [gaussianBlur()](#gaussianblur)\n\n### border\n\n**Live Demo:** [Border](https://jhuckaby.github.io/canvas-plus-playground/?t=load/eyJpbWFnZSI6IndhdGVyZmFsbC5qcGcifQ%3D%3D&t=resize/eyJ3aWR0aCI6NjQwLCJoZWlnaHQiOjQ4MCwibW9kZSI6ImZpdCJ9&t=border/eyJzaXplIjoxNSwiY29sb3IiOiIjZmZhYTAwIn0%3D&f=png)\n\nThe `border()` method draws a border around your canvas, with a custom size and color.  It accepts an object containing the following properties:\n\n| Property Name | Type | Description |\n|---------------|------|-------------|\n| `size` | Integer | **(Required)** Size of the border in pixels. |\n| `color` | String | **(Required)** Color of the border (any CSS color string). |\n| `mode` | String | **(Required)** Border render mode (`inside`, `center` or `outside`). |\n\nThe mode can be one of `inside` (draw on top of edge pixels), `outside` (expand canvas by border size), or `center` (draw border half inside, half outside).  The latter two modes will actually [expand](#expand) the canvas to accommodate the border.\n\nExample use:\n\n```js\ncanvas.border({\n\t\"size\": 5,\n\t\"color\": \"#FF0000\",\n\t\"mode\": \"inside\"\n});\n```\n\nNote that transparent colors aren't supported for this filter.\n\n### composite\n\n**Live Demo:** [Composite](https://jhuckaby.github.io/canvas-plus-playground/?t=load/eyJpbWFnZSI6IndhdGVyZmFsbC5qcGcifQ%3D%3D&t=resize/eyJ3aWR0aCI6NjQwLCJoZWlnaHQiOjQ4MCwibW9kZSI6ImZpdCJ9&t=composite/e30%3D&f=png)\n\nThe `composite()` method superimposes a separate image or canvas atop the current one.  The source can be another CanvasPlus object, a native [HTML5 Canvas](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/canvas) object, or a native [Image](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img) object.  Several parameters are provided for positioning, scaling and setting the compositing mode.  The method accepts an object containing the following properties:\n\n| Property Name | Type | Description |\n|---------------|------|-------------|\n| `image` | Object | **(Required)** Source image or canvas to superimpose atop current canvas. |\n| `width` | Integer | Optional desired width, will trigger a resize during composite. |\n| `height` | Integer | Optional desired height, will trigger a resize during composite. |\n| `scale` | Float | Optional scaling multiplier for the source image.  Example: `0.5` for half size, `2.0` for double size. |\n| `gravity` | String | Image starting position (alignment), which can be further adjusted with margins and/or offsets.  See [Gravity](#gravity). |\n| `marginX` | Integer | Horizontal margin in pixels, defaults to `0`. |\n| `marginY` | Integer | Vertical margin in pixels, defaults to `0`. |\n| `offsetX` | Integer | Horizontal offset in pixels, defaults to `0`. |\n| `offsetY` | Integer | Vertical offset in pixels, defaults to `0`. |\n| `opacity` | Float | Image opacity (0.0 to 1.0), defaults to `1.0`. |\n| `mode` | String | Composite rendering mode, see [globalCompositeOperation](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/globalCompositeOperation), defaults to `source-over`. |\n| `antialias` | String | Image scaling quality, one of `best`, `good`, `fast` or `nearest`.  Defaults to `best`.  See [Anti-Aliasing](#anti-aliasing). |\n\nExample use:\n\n```js\ncanvas.composite({\n\t\"image\": my_other_canvas,\n\t\"gravity\": \"northwest\",\n\t\"marginX\": 10,\n\t\"marginY\": 10\n});\n```\n\nYou can also use `scale` to quickly resize the source image by a relative amount before it is composited:\n\n```js\ncanvas.composite({\n\t\"image\": my_other_canvas,\n\t\"scale\": 0.5,\n\t\"gravity\": \"center\"\n});\n```\n\nNote that when `width`, `height` and/or `scale` are specified here, the image is resized in *exact* (scale) mode.  If `scale` is combined with `width` and/or `height`, the multiplier is applied after those dimensions are resolved.\n\n### convolve\n\n**Live Demo:** [3x3 Sharpen Kernel](https://jhuckaby.github.io/canvas-plus-playground/?t=load/eyJpbWFnZSI6IndhdGVyZmFsbC5qcGcifQ%3D%3D&t=resize/eyJ3aWR0aCI6NjQwLCJoZWlnaHQiOjQ4MCwibW9kZSI6ImZpdCJ9&t=convolve/eyJtYXRyaXgiOlswLC0xLDAsLTEsNSwtMSwwLC0xLDBdfQ%3D%3D&f=png)\n\nThe `convolve()` method applies a custom [convolution kernel](https://en.wikipedia.org/wiki/Kernel_%28image_processing%29) to the canvas.  This is used to apply effects such as [blur](#blur), [sharpen](#sharpen), [emboss](#emboss), [find edges](#findedges), and more.  The method accepts an object containing the following properties:\n\n| Property Name | Type | Description |\n|---------------|------|-------------|\n| `matrix` | Array | **(Required)** An array of numbers for the convolution matrix.  The length should be a perfect square (e.g. 9, 16, 25). |\n| `offset` | Integer | Optionally offset the destination channel values, causing a brightening effect (used by [emboss](#emboss)). |\n| `edges` | String | How to calculate out-of-bounds pixels, can be one of `repeat`, `wrap`, `mirror` or `discard`.  Defaults to `repeat`. |\n| `channels` | String | Which channels to apply the filter to, defaults to `rgba`.  See [Channels](#channels). |\n| `clip` | Object | Optional clipping rectangle (see [Clipping](#clipping) below). |\n\nExample use:\n\n```js\ncanvas.convolve({\n\t\"matrix\": [ // 3x3 sharpen\n\t\t0, -1, 0, \n\t\t-1, 5, -1, \n\t\t0, -1, 0\n\t]\n});\n```\n\n### crop\n\n**Live Demo:** [Square Earth](https://jhuckaby.github.io/canvas-plus-playground/?t=load/eyJpbWFnZSI6ImVhcnRoLW5hc2EuanBnIn0%3D&t=resize/eyJ3aWR0aCI6NjQwLCJoZWlnaHQiOjY0MCwibW9kZSI6ImZpdCJ9&t=crop/eyJ4IjoxNjAsInkiOjE2MCwid2lkdGgiOjMyMCwiaGVpZ2h0IjozMjB9&f=png)\n\nThe `crop()` method crops the canvas down to the specified size, at the specified coordinates (top-left corner).  All values are specified in pixels.  The method accepts an object containing the following properties:\n\n| Property Name | Type | Description |\n|---------------|------|-------------|\n| `x` | Integer | **(Required)** The coordinate of the left side of the crop rectangle. |\n| `y` | Integer | **(Required)** The coordinate of the top side of the crop rectangle. |\n| `width` | Integer | **(Required)** The width of the crop rectangle. |\n| `height` | Integer | **(Required)** The width of the crop rectangle. |\n\nExample use:\n\n```js\ncanvas.crop({\n\t\"x\": 50,\n\t\"y\": 50,\n\t\"width\": 200,\n\t\"height\": 200\n});\n```\n\nNote that cropping regenerates the underlying canvas object.  It effectively creates a new canvas at the final cropped size, then copies the source into the destination, then discards the source.\n\n**See Also**: [trim()](#trim)\n\n### curves\n\n**Live Demo:** [Increase mid-tones](https://jhuckaby.github.io/canvas-plus-playground/?t=load/eyJpbWFnZSI6IndhdGVyZmFsbC5qcGcifQ%3D%3D&t=resize/eyJ3aWR0aCI6NjQwLCJoZWlnaHQiOjQ4MCwibW9kZSI6ImZpdCJ9&t=curves/eyJwb2ludHMiOlswLDE5MSwyNTVdfQ%3D%3D&f=png) (see below for more)\n\nThe `curves()` method applies a [tonality curve](https://en.wikipedia.org/wiki/Curve_%28tonality%29) to all the pixels in your canvas.  You need only provide key points, and all the curve values are interpolated using [monotone cubic interpolation](https://en.wikipedia.org/wiki/Monotone_cubic_interpolation) (similar to how Photoshop does it).  Curves are used to implement all kinds of common image filters, including [gamma adjustment](#gamma), [inversion](#invert), [posterize](#posterize), [solarize](#solarize), [normalize](#normalize), [sepia](#sepia), and [color temperature](#temperature).  But here you can supply your own custom curve by specifying key points, including different curves per channel if desired.  The method accepts an object containing the following properties:\n\n| Property Name | Type | Description |\n|---------------|------|-------------|\n| `rgb` | Array | An array of curve points for the red, green and blue channels together (same curve applied to all). |\n| `red` | Array | An array of curve points for the red channel specifically. |\n| `green` | Array | An array of curve points for the green channel specifically. |\n| `blue` | Array | An array of curve points for the blue channel specifically. |\n| `alpha` | Array | An array of curve points for the alpha channel specifically. |\n| `clip` | Object | Optional clipping rectangle (see [Clipping](#clipping) below). |\n\nYou can specify the curve points in two ways.  First, a simple one-dimensional array of \"Y\" axis values (each 0 - 255), which are evenly distributed over the \"X\" axis, from darkest to lightest.  And second, an array of X/Y pairs specifying a more precise curve.  Example of the former:\n\n```js\ncanvas.curves({\n\t\"rgb\": [0, 191, 255] // increase mid-tones\n});\n```\n\nTo better explain how this works, here is a table with some common curves, a visualization, and a live demo of each:\n\n| Curve Points | Visualization | Description | Demo Link |\n|--------------|---------------|-------------|-----------|\n| `[0, 255]` | <img src=\"https://pixlcore.com/canvas-plus/images/0-255.png\" width=\"192\"> | Baseline (no change) | [Live Demo](https://jhuckaby.github.io/canvas-plus-playground/?t=load/eyJpbWFnZSI6IndhdGVyZmFsbC5qcGcifQ%3D%3D&t=resize/eyJ3aWR0aCI6NjQwLCJoZWlnaHQiOjQ4MCwibW9kZSI6ImZpdCJ9&t=curves/eyJwb2ludHMiOlswLDI1NV19&f=png) |\n| `[63, 255]` | <img src=\"https://pixlcore.com/canvas-plus/images/63-255.png\" width=\"192\"> | Increase brightness | [Live Demo](https://jhuckaby.github.io/canvas-plus-playground/?t=load/eyJpbWFnZSI6IndhdGVyZmFsbC5qcGcifQ%3D%3D&t=resize/eyJ3aWR0aCI6NjQwLCJoZWlnaHQiOjQ4MCwibW9kZSI6ImZpdCJ9&t=curves/eyJwb2ludHMiOls2MywyNTVdfQ%3D%3D&f=png) |\n| `[0, 127]` | <img src=\"https://pixlcore.com/canvas-plus/images/0-127.png\" width=\"192\"> | Decrease brightness | [Live Demo](https://jhuckaby.github.io/canvas-plus-playground/?t=load/eyJpbWFnZSI6IndhdGVyZmFsbC5qcGcifQ%3D%3D&t=resize/eyJ3aWR0aCI6NjQwLCJoZWlnaHQiOjQ4MCwibW9kZSI6ImZpdCJ9&t=curves/eyJwb2ludHMiOlswLDEyN119&f=png) |\n| `[0, 0, 255, 255]` | <img src=\"https://pixlcore.com/canvas-plus/images/0-0-255-255.png\" width=\"192\"> | Increase contrast | [Live Demo](https://jhuckaby.github.io/canvas-plus-playground/?t=load/eyJpbWFnZSI6IndhdGVyZmFsbC5qcGcifQ%3D%3D&t=resize/eyJ3aWR0aCI6NjQwLCJoZWlnaHQiOjQ4MCwibW9kZSI6ImZpdCJ9&t=curves/eyJwb2ludHMiOlswLDAsMjU1LDI1NV19&f=png) |\n| `[63, 191]` | <img src=\"https://pixlcore.com/canvas-plus/images/63-191.png\" width=\"192\"> | Decrease contrast | [Live Demo](https://jhuckaby.github.io/canvas-plus-playground/?t=load/eyJpbWFnZSI6IndhdGVyZmFsbC5qcGcifQ%3D%3D&t=resize/eyJ3aWR0aCI6NjQwLCJoZWlnaHQiOjQ4MCwibW9kZSI6ImZpdCJ9&t=curves/eyJwb2ludHMiOls2MywxOTFdfQ%3D%3D&f=png) |\n| `[0, 191, 255]` | <img src=\"https://pixlcore.com/canvas-plus/images/0-191-255.png\" width=\"192\"> | Increase mid-tones | [Live Demo](https://jhuckaby.github.io/canvas-plus-playground/?t=load/eyJpbWFnZSI6IndhdGVyZmFsbC5qcGcifQ%3D%3D&t=resize/eyJ3aWR0aCI6NjQwLCJoZWlnaHQiOjQ4MCwibW9kZSI6ImZpdCJ9&t=curves/eyJwb2ludHMiOlswLDE5MSwyNTVdfQ%3D%3D&f=png) |\n| `[0, 63, 255]` | <img src=\"https://pixlcore.com/canvas-plus/images/0-63-255.png\" width=\"192\"> | Decrease mid-tones | [Live Demo](https://jhuckaby.github.io/canvas-plus-playground/?t=load/eyJpbWFnZSI6IndhdGVyZmFsbC5qcGcifQ%3D%3D&t=resize/eyJ3aWR0aCI6NjQwLCJoZWlnaHQiOjQ4MCwibW9kZSI6ImZpdCJ9&t=curves/eyJwb2ludHMiOlswLDYzLDI1NV19&f=png) |\n| `[0, 96, 160, 216, 255]` | <img src=\"https://pixlcore.com/canvas-plus/images/0-96-160-216-225.png\" width=\"192\"> | Increase shadow detail | [Live Demo](https://jhuckaby.github.io/canvas-plus-playground/?t=load/eyJpbWFnZSI6IndhdGVyZmFsbC5qcGcifQ%3D%3D&t=resize/eyJ3aWR0aCI6NjQwLCJoZWlnaHQiOjQ4MCwibW9kZSI6ImZpdCJ9&t=curves/eyJwb2ludHMiOlswLDk2LDE2MCwyMTYsMjU1XX0%3D&f=png) |\n| `[255, 0]` | <img src=\"https://pixlcore.com/canvas-plus/images/255-0.png\" width=\"192\"> | Invert image | [Live Demo](https://jhuckaby.github.io/canvas-plus-playground/?t=load/eyJpbWFnZSI6IndhdGVyZmFsbC5qcGcifQ%3D%3D&t=resize/eyJ3aWR0aCI6NjQwLCJoZWlnaHQiOjQ4MCwibW9kZSI6ImZpdCJ9&t=curves/eyJwb2ludHMiOlsyNTUsMF19&f=png) |\n| `[0, 127, 0]` | <img src=\"https://pixlcore.com/canvas-plus/images/0-127-0.png\" width=\"192\"> | Solarize effect | [Live Demo](https://jhuckaby.github.io/canvas-plus-playground/?t=load/eyJpbWFnZSI6IndhdGVyZmFsbC5qcGcifQ%3D%3D&t=resize/eyJ3aWR0aCI6NjQwLCJoZWlnaHQiOjQ4MCwibW9kZSI6ImZpdCJ9&t=curves/eyJwb2ludHMiOlswLDEyNywwXX0%3D&f=png) |\n| `[0, 255, 0, 255]` | <img src=\"https://pixlcore.com/canvas-plus/images/0-255-0-255.png\" width=\"192\"> | Alice in Wonderland | [Live Demo](https://jhuckaby.github.io/canvas-plus-playground/?t=load/eyJpbWFnZSI6IndhdGVyZmFsbC5qcGcifQ%3D%3D&t=resize/eyJ3aWR0aCI6NjQwLCJoZWlnaHQiOjQ4MCwibW9kZSI6ImZpdCJ9&t=curves/eyJwb2ludHMiOlswLDI1NSwwLDI1NV19&f=png) |\n\nYou can also specify different curves to each channel.  For example, here is one way to apply a sepia tone effect to an image:\n\n```js\ncanvas.desaturate().curves({\n\t\"green\": [0, 108, 255],\n\t\"blue\": [0, 64, 255]\n});\n```\n\nAs mentioned above, you can alternatively specify an array of X/Y pairs for the key points, to describe a more precise curve.  Here is an example of that:\n\n```js\ncanvas.curves({\n\t\"rgb\": [\n\t\t[0, 0],\n\t\t[32, 192],\n\t\t[255, 255]\n\t]\n});\n```\n\nNote that if your point array contains exactly 256 elements, and is a simple one-dimensional array of integers, then no interpolation is performed, and the points are mapped *exactly* to each value as specified.\n\n### desaturate\n\n**Live Demo:** [Desaturate](https://jhuckaby.github.io/canvas-plus-playground/?t=load/eyJpbWFnZSI6IndhdGVyZmFsbC5qcGcifQ%3D%3D&t=resize/eyJ3aWR0aCI6NjQwLCJoZWlnaHQiOjQ4MCwibW9kZSI6ImZpdCJ9&t=desaturate/e30%3D&f=png)\n\nThe `desaturate()` method removes all color from your canvas, resulting in a pure grayscale image.  Instead of averaging the channels together, they are weighted in such a way that the grayscale output is more natural-looking (see [relative luminance](https://en.wikipedia.org/wiki/Luma_%28video%29#Use_of_relative_luminance)).\n\nThis is similar to calling [adjust()](#adjust) and setting the `saturation` to `-255`, however `desaturate()` is much faster.  The method accepts an object containing the following properties:\n\n| Property Name | Type | Description |\n|---------------|------|-------------|\n| `clip` | Object | Optional clipping rectangle (see [Clipping](#clipping) below). |\n\nExample use:\n\n```js\ncanvas.desaturate();\n```\n\n### draw\n\n**Live Demo:** [Draw Primitives](https://jhuckaby.github.io/canvas-plus-playground/?t=create/eyJ3aWR0aCI6NjQwLCJoZWlnaHQiOjQ4MCwiYmFja2dyb3VuZCI6IiNkZGRkZGQifQ%3D%3D&t=draw/eyJtb2RlIjoicmVjdCIsIngxIjo1MCwieTEiOjUwLCJ4MiI6MTAwLCJ5MiI6MTAwLCJ4Ijo3NSwieSI6NzUsIndpZHRoIjoyMDAsImhlaWdodCI6MjAwfQ%3D%3D&t=draw/eyJ4MSI6MTUwLCJ5MSI6MTAwLCJ4MiI6MzUwLCJ5MiI6MzAwLCJ3aWR0aCI6MSwiaGVpZ2h0IjoxLCJmaWxsIjoiIiwic3Ryb2tlIjoiI2ZmMDAwMCJ9&f=png)\n\nThe `draw()` method allows you to draw primitive geometric objects onto the canvas, such as rectangles, lines, or custom shapes.  This is basically just a convenience wrapper around the [HTML5 Canvas drawing API](https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API/Tutorial/Drawing_shapes).  The method accepts an object containing the following properties:\n\n| Property Name | Type | Description |\n|---------------|------|-------------|\n| `params` | Object | Optional parameters to set on the canvas context, e.g. `fillStyle`, `strokeStyle`. |\n| `commands` | Object | An array of commands to run on the canvas context, e.g. `['fill']`. |\n| `antialias` | String | Draw rendering quality, one of `best`, `good`, `fast` or `nearest`.  Defaults to `best`.  See [Anti-Aliasing](#anti-aliasing). |\n\nHere is an example:\n\n```js\ncanvas.draw({\n\tparams: {\n\t\tfillStyle: '#888888',\n\t\tstrokeStyle: '#000000',\n\t\tlineWidth: 2\n\t},\n\tcommands: [\n\t\t['rect', 50, 50, 100, 100],\n\t\t['fill'],\n\t\t['stroke']\n\t]\n});\n```\n\nThis example would draw a filled + stroked rectangle onto the canvas.  The `params` object can contain any properties you want to set on the canvas context before running the draw commands (i.e. colors, stroke width, line caps, etc.), and the `commands` array contains each draw call to make.  Each element in the `commands` array should be a nested array containing the draw call name (e.g. `rect`), followed by any additional arguments required by the call, such as coordinates for a rectangle, or points for a moveTo / lineTo.\n\nUsing this syntax, you can draw complex shapes by calling any of the HTML5 Canvas API draw methods.  Here is an example which draws a filled triangle:\n\n```js\ncanvas.draw({\n\tparams: {\n\t\tfillStyle: '#000000'\n\t},\n\tcommands: [\n\t\t['beginPath'],\n\t\t['moveTo', 75, 70],\n\t\t['lineTo', 100, 75],\n\t\t['lineTo', 100, 25],\n\t\t['fill']\n\t]\n});\n```\n\nConvenience properties are provided for drawing simple rectangles and lines, to make the syntax a little easier for common use cases.  Here is the list of optional properties:\n\n| Property Name | Type | Description |\n|---------------|------|-------------|\n| `line` | Array | An array of 4 coordinates, the first two being the X/Y of the line start point, and the latter two being the X/Y of the line end point. |\n| `rect` | Array | An array of 4 coordinates, the first two being the X/Y of the rectangle's top-left corner, and the latter two being the width and height. |\n| `fill` | String | Setting this to a color will set the canvas context `fillStyle` property, and append a `['fill']` command to the end of the list. |\n| `stroke` | String | Setting this to a color will set the canvas context `strokeStyle` property, and append a `['stroke']` command to the end of the list. |\n\nExamples:\n\n```js\ncanvas.draw({\n\t\"rect\": [ 75, 75, 200, 200 ],\n\t\"fill\": \"#888888\",\n\t\"stroke\": \"#000000\"\n});\n\ncanvas.draw({\n\t\"line\": [ 150, 100, 350, 300 ],\n\t\"stroke\": \"#ff0000\"\n});\n```\n\n### emboss\n\n**Live Demo:** [Emboss](https://jhuckaby.github.io/canvas-plus-playground/?t=load/eyJpbWFnZSI6IndhdGVyZmFsbC5qcGcifQ%3D%3D&t=resize/eyJ3aWR0aCI6NjQwLCJoZWlnaHQiOjQ4MCwibW9kZSI6ImZpdCJ9&t=emboss/e30%3D&f=png)\n\nThe `emboss()` method applies an [emboss filter](https://en.wikipedia.org/wiki/Image_embossing) to the canvas, which is implemented using a 3x3 convolution kernel.  The method accepts an object containing the following properties:\n\n| Property Name | Type | Description |\n|---------------|------|-------------|\n| `channels` | String | Which channels to apply the filter to, defaults to `rgb`.  See [Channels](#channels). |\n| `clip` | Object | Optional clipping rectangle (see [Clipping](#clipping) below). |\n\nExample use:\n\n```js\ncanvas.emboss();\n```\n\nThis is equivalent to calling [desaturate()](#desaturate), followed by [convolve()](#convolve) with the following parameters:\n\n```js\ncanvas.desaturate().convolve({ \n\tmatrix: [2, 0, 0, 0, -1, 0, 0, 0, -1], \n\toffset: 127, \n\tedges: 'repeat',\n\tchannels: 'rgb'\n});\n```\n\n### expand\n\n**Live Demo:** [Expand](https://jhuckaby.github.io/canvas-plus-playground/?t=load/eyJpbWFnZSI6IndhdGVyZmFsbC5qcGcifQ%3D%3D&t=resize/eyJ3aWR0aCI6NjQwLCJoZWlnaHQiOjQ4MCwibW9kZSI6ImZpdCJ9&t=expand/eyJ3aWR0aCI6MTAwLCJoZWlnaHQiOjEwMCwiYmFja2dyb3VuZCI6InJnYmEoMCwgMCwgMCwgMCkiLCJncmF2aXR5IjoiY2VudGVyIn0%3D&f=png)\n\nThe `expand()` method increases the canvas size, while not resizing the image itself.  This is essentially a \"reverse crop\".  You can specify an alignment (gravity) for positioning the existing image on the expanded canvas, and an optional background color.  The method accepts an object containing the following properties:\n\n| Property Name | Type | Description |\n|---------------|------|-------------|\n| `width` | Integer | Number of pixels to increase the width by (this is a delta). |\n| `height` | Integer | Number of pixels to increase the height by (this is a delta). |\n| `gravity` | String | Image position (alignment) of pre-existing pixels on new expanded canvas.  See [Gravity](#gravity). |\n| `background` | String | Background color for canvas expansion (any CSS color string).  Fully transparent if omitted. |\n\nExample use:\n\n```js\ncanvas.expand({\n\t\"width\": 100,\n\t\"height\": 100,\n\t\"gravity\": \"center\"\n});\n```\n\nThis would *increase* the canvas size by 100px horizontally and vertically, essentially adding a 50px transparent border on all sides of the image.\n\nNote that expanding regenerates the underlying canvas object.  It effectively creates a new canvas at the expanded size, then copies the source into the destination, then discards the source.\n\n### exposure\n\n**Live Demo:** [Exposure](https://jhuckaby.github.io/canvas-plus-playground/?t=load/eyJpbWFnZSI6ImtpdHRlbi5qcGcifQ%3D%3D&t=exposure/eyJhbW91bnQiOjI1fQ%3D%3D&f=png)\n\nThe `exposure()` method simulates increasing or decreasing the camera film exposure.  Internally, this is accomplished by a special [curve](#curves).  To use, specify an `amount` between -100 (darken) and 100 (lighten).  The method accepts an object containing the following properties:\n\n| Property Name | Type | Description |\n|---------------|------|-------------|\n| `amount` | Integer | Exposure adjustment, from -100 (darken) to 100 (lighten). | \n| `channels` | String | Which channels to apply the filter to, defaults to `rgb`.  See [Channels](#channels). |\n| `clip` | Object | Optional clipping rectangle (see [Clipping](#clipping) below). |\n\nExample use:\n\n```js\ncanvas.exposure({\n\t\"amount\": 25\n});\n```\n\nNote that if `amount` is the sole argument, you can simply pass the number itself:\n\n```js\ncanvas.exposure( 25 );\n```\n\n### findEdges\n\n**Live Demo:** [Find Edges](https://jhuckaby.github.io/canvas-plus-playground/?t=load/eyJpbWFnZSI6InN1bnNldC5qcGcifQ%3D%3D&t=resize/eyJ3aWR0aCI6NjQwLCJoZWlnaHQiOjQ4MCwibW9kZSI6ImZpdCJ9&t=findEdges/e30%3D&f=png)\n\nThe `findEdges()` method applies a [Sobel operator](https://en.wikipedia.org/wiki/Sobel_operator) to the canvas, resulting in a strong highlight of all the apparent edges in the image.  This uses a 3x3 convolution kernel.  The method accepts an object containing the following properties:\n\n| Property Name | Type | Description |\n|---------------|------|-------------|\n| `channels` | String | Which channels to apply the filter to, defaults to `rgb`.  See [Channels](#channels). |\n| `clip` | Object | Optional clipping rectangle (see [Clipping](#clipping) below). |\n\nExample use:\n\n```js\ncanvas.findEdges();\n```\n\nThis is equivalent to calling [desaturate()](#desaturate), followed by [convolve()](#convolve) with the following parameters:\n\n```js\ncanvas.desaturate().convolve({ \n\tmatrix: [-1, -1, -1, -1, 8, -1, -1, -1, -1], \n\toffset: 0, \n\tedges: 'repeat',\n\tchannels: 'rgb'\n});\n```\n\n### flatten\n\n**Live Demo:** [Flatten](https://jhuckaby.github.io/canvas-plus-playground/?t=load/e30%3D&t=resize/eyJ3aWR0aCI6NjQwLCJoZWlnaHQiOjQ4MCwibW9kZSI6ImZpdCJ9&t=flatten/eyJiYWNrZ3JvdW5kIjoiI2ZmZmZmZiJ9&f=png)\n\nThe `flatten()` method effectively removes the alpha channel from your canvas, resulting in a fully opaque image.  Of course, the alpha channel still technically exists, as all canvases are RGBA, but this allows you to remove all transparency.  You can choose to place a background color matte behind the image, or simply set the direct alpha values to 255.  The method accepts an object containing the following properties:\n\n| Property Name | Type | Description |\n|---------------|------|-------------|\n| `background` | String | Optional background color (any CSS color string). |\n| `clip` | Object | Optional clipping rectangle (see [Clipping](#clipping) below). |\n\nExample use:\n\n```js\ncanvas.flatten({\n\t\"background\": \"#000000\"\n});\n```\n\nWhen a `background` is specified, the underlying canvas object is regenerated.  The library effectively creates a new canvas with the specified background color, superimposes the source onto the destination, then discards the source.\n\nIf you omit the `background` property (or it evaluates to `false`) then the alpha pixel values are all set to 255 in a direct sense.  This may expose otherwise \"hidden\" visual elements in your image, depending on how it was encoded.\n\nNote that flattening the canvas sets an internal `alpha` flag to `false`, which indicates that PNG and GIF output should not contain any alpha information.  You can manually get/set this flag using [get()](#get) and [set()](#set), although you should rarely need to.\n\n### gamma\n\n**Live Demo:** [Gamma Adjust](https://jhuckaby.github.io/canvas-plus-playground/?t=load/eyJpbWFnZSI6IndhdGVyZmFsbC5qcGcifQ%3D%3D&t=resize/eyJ3aWR0aCI6NjQwLCJoZWlnaHQiOjQ4MCwibW9kZSI6ImZpdCJ9&t=gamma/eyJhbW91bnQiOjIuMn0%3D&f=png)\n\nThe `gamma()` method applies a [gamma correction](https://en.wikipedia.org/wiki/Gamma_correction) curve to your canvas.  Values less than 1.0 will lighten the image, whereas values greater than 1.0 will darken it.  The method accepts an object containing the following properties:\n\n| Property Name | Type | Description |\n|---------------|------|-------------|\n| `amount` | Float | Gamma correction value, typically in the range `0.25` to `4.0`.  The default value is `1.0` (no change). |\n| `channels` | String | Which channels to apply the filter to, defaults to `rgb`.  See [Channels](#channels). |\n| `clip` | Object | Optional clipping rectangle (see [Clipping](#clipping) below). |\n\nExample use:\n\n```js\ncanvas.gamma({\n\t\"amount\": 0.5\n});\n```\n\n### gaussianBlur\n\n**Live Demo:** [Gaussian Blur](https://jhuckaby.github.io/canvas-plus-playground/?t=load/eyJpbWFnZSI6IndhdGVyZmFsbC5qcGcifQ%3D%3D&t=resize/eyJ3aWR0aCI6NjQwLCJoZWlnaHQiOjQ4MCwibW9kZSI6ImZpdCJ9&t=gaussianBlur/eyJhbW91bnQiOjZ9&f=png)\n\nThe `gaussianBlur()` method applies a [Gaussian blur](https://en.wikipedia.org/wiki/Gaussian_blur) to your image, using a custom [convolution kernel](#convolve).  This is a rather computationally expensive filter, but is much higher quality than the standard [blur](#blur).  It accepts an object containing the following properties:\n\n| Property Name | Type | Description |\n|---------------|------|-------------|\n| `amount` | Integer | **(Required)** Blur amount (3 to 100). |\n| `sigma` | Integer | Gaussian sigma operator (defaults to `amount / 3`). |\n| `edges` | String | How to calculate out-of-bounds pixels, can be one of `repeat`, `wrap`, `mirror` or `discard` (case-insensitive).  Defaults to `repeat`. |\n| `channels` | String | Which channels to apply the filter to, defaults to `rgba`.  See [Channels](#channels). |\n| `clip` | Object | Optional clipping rectangle (see [Clipping](#clipping) below). |\n\nThe `amount` is really just the size of one dimension of the [Gaussian convolution matrix](https://en.wikipedia.org/wiki/Gaussian_blur#Sample_Gaussian_matrix) (it is squared to compute the full matrix size), so the larger the `amount` the slower the operation is.  The `sigma` actually controls the amount of blurring that occurs.  For best results, set `sigma` to 1/3 of `amount` (this is the default behavior if `sigma` is omitted).\n\nExample use:\n\n```js\ncanvas.gaussianBlur({\n\t\"amount\": 9\n});\n```\n\n### invert\n\n**Live Demo:** [Invert](https://jhuckaby.github.io/canvas-plus-playground/?t=load/eyJpbWFnZSI6IndhdGVyZmFsbC5qcGcifQ%3D%3D&t=resize/eyJ3aWR0aCI6NjQwLCJoZWlnaHQiOjQ4MCwibW9kZSI6ImZpdCJ9&t=invert/e30%3D&f=png)\n\nThe `invert()` method inverts all colors in the image (i.e. creates a photographic negative), or can be restricted to certain specified channels.  The method accepts an object containing the following properties:\n\n| Property Name | Type | Description |\n|---------------|------|-------------|\n| `channels` | String | Which channels to apply the filter to, defaults to `rgb`.  See [Channels](#channels). |\n| `clip` | Object | Optional clipping rectangle (see [Clipping](#clipping) below). |\n\nExample use:\n\n```js\ncanvas.invert();\n```\n\nInversion is implemented using a [curve](#curves), and is functionally equivalent to calling:\n\n```js\ncanvas.curves({\n\t\"rgb\": [255, 0]\n});\n```\n\n### lighting\n\n**Live Demo:** [Shadow Detail](https://jhuckaby.github.io/canvas-plus-playground/?t=load/eyJpbWFnZSI6InN1bnNldC5qcGcifQ%3D%3D&t=lighting/eyJzaGFkb3dzIjo1MH0%3D&f=png)\n\nThe `lighting()` method can adjust both shadows and highlights, to bring out hidden details.  Internally, this is accomplished by a special multi-point [curve](#curves).  The method accepts an object containing the following properties:\n\n| Property Name | Type | Description |\n|---------------|------|-------------|\n| `shadows` | Integer | Shadow detail adjustment, from -100 (darken) to 100 (lighten). | \n| `highlights` | Integer | Highlight detail adjustment, from -100 (darken) to 100 (lighten). | \n| `channels` | String | Which channels to apply the filter to, defaults to `rgb`.  See [Channels](#channels). |\n| `clip` | Object | Optional clipping rectangle (see [Clipping](#clipping) below). |\n\nExample use:\n\n```js\ncanvas.lighting({\n\t\"shadows\": 25\n});\n```\n\n### mask\n\n**Live Demo:** [Apply Mask](https://jhuckaby.github.io/canvas-plus-playground/?t=load/eyJpbWFnZSI6IndhdGVyZmFsbC5qcGcifQ%3D%3D&t=resize/eyJ3aWR0aCI6NjQwLCJoZWlnaHQiOjQ4MCwibW9kZSI6ImZpdCJ9&t=mask/e30%3D&f=png)\n\nThe `mask()` method applies a separate image or canvas as a mask onto the current one.  Meaning, the alpha channel of one is applied to the other.  The source can be another CanvasPlus object, a native [HTML5 Canvas](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/canvas) object, or a native [Image](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img) object.  Several parameters are provided for positioning and scaling the mask.  The method accepts an object containing the following properties:\n\n| Property Name | Type | Description |\n|---------------|------|-------------|\n| `image` | Object | **(Required)** Source image or canvas to apply as a mask. |\n| `width` | Integer | Optional desired width, will trigger a resize during composite. |\n| `height` | Integer | Optional desired height, will trigger a resize during composite. |\n| `scale` | Float | Optional scaling multiplier for the mask image.  Example: `0.5` for half size, `2.0` for double size. |\n| `gravity` | String | Image starting position (alignment), which can be further adjusted with margins and/or offsets.  See [Gravity](#gravity). |\n| `marginX` | Integer | Horizontal margin in pixels, defaults to `0`. |\n| `marginY` | Integer | Vertical margin in pixels, defaults to `0`. |\n| `offsetX` | Integer | Horizontal offset in pixels, defaults to `0`. |\n| `offsetY` | Integer | Vertical offset in pixels, defaults to `0`. |\n| `opacity` | Float | Mask opacity (0.0 to 1.0), defaults to `1.0`. |\n| `antialias` | String | Mask scaling quality, one of `best`, `good`, `fast` or `nearest`.  Defaults to `best`.  See [Anti-Aliasing](#anti-aliasing). |\n\nExample use:\n\n```js\ncanvas.mask({\n\t\"image\": my_mask_image,\n\t\"gravity\": \"center\"\n});\n```\n\nYou can also use `scale` to resize the mask by a relative amount before applying it:\n\n```js\ncanvas.mask({\n\t\"image\": my_mask_image,\n\t\"scale\": 0.5,\n\t\"gravity\": \"center\"\n});\n```\n\nMasking is effectively the same as calling [composite()](#composite) with the `mode` set to `destination-in`.\n\nNote that when `width`, `height` and/or `scale` are specified, the mask is resized in *exact* (scale) mode.  If `scale` is combined with `width` and/or `height`, the multiplier is applied after those dimensions are resolved.\n\n### normalize\n\n**Live Demo:** [Normalize](https://jhuckaby.github.io/canvas-plus-playground/?t=load/eyJpbWFnZSI6InN1bnNldC5qcGcifQ%3D%3D&t=resize/eyJ3aWR0aCI6NjQwLCJoZWlnaHQiOjQ4MCwibW9kZSI6ImZpdCJ9&t=normalize/e30%3D&f=png)\n\nThe `normalize()` method stretches the image contrast to cover the entire range of possible values.  So for example, if the image never reaches full back and/or full white, this will increase the contrast so both sides are maxed.  The method accepts an object containing the following properties:\n\n| Property Name | Type | Description |\n|---------------|------|-------------|\n| `channels` | String | Which channels to apply the filter to, defaults to `rgb`.  See [Channels](#channels). |\n| `clip` | Object | Optional clipping rectangle (see [Clipping](#clipping) below). |\n\nExample use:\n\n```js\ncanvas.normalize();\n```\n\nNormalize is implemented by requesting a [histogram](#histogram) to locate the white and black points, and then applying a custom [curve](#curves).\n\n### opacity\n\n**Live Demo:** [Half Transparent](https://jhuckaby.github.io/canvas-plus-playground/?t=load/eyJpbWFnZSI6IndhdGVyZmFsbC5qcGcifQ%3D%3D&t=resize/eyJ3aWR0aCI6NjQwLCJoZWlnaHQiOjQ4MCwibW9kZSI6ImZpdCJ9&t=opacity/eyJvcGFjaXR5IjowLjV9&f=png)\n\nThe `opacity()` method fades the canvas out towards pure transparent, or a custom background color.  The method accepts an opacity float, or an object containing the following properties:\n\n| Property Name | Type | Description |\n|---------------|------|-------------|\n| `opacity` | Float | The target image opacity from `0.0` (transparent) to `1.0` (opaque). |\n| `background` | String | Optional background color, defaults to transparent. |\n\nExample use:\n\n```js\ncanvas.opacity({\n\topacity: 0.5,\n\tbackground: 'red'\n});\n```\n\nIf you are only specifying opacity (no background), you can just pass the number as the sole argument:\n\n```js\ncanvas.opacity( 0.5 );\n```\n\n### posterize\n\n**Live Demo:** [Posterize](https://jhuckaby.github.io/canvas-plus-playground/?t=load/eyJpbWFnZSI6IndhdGVyZmFsbC5qcGcifQ%3D%3D&t=resize/eyJ3aWR0aCI6NjQwLCJoZWlnaHQiOjQ4MCwibW9kZSI6ImZpdCJ9&t=posterize/e30%3D&f=png)\n\nThe `posterize()` method reduces the image to a limited number of color levels per channel.  Smaller level amounts have the most obvious effect.  The method accepts an object containing the following properties:\n\n| Property Name | Type | Description |\n|---------------|------|-------------|\n| `levels` | Integer | **(Required)** Number of levels to allow per channel. |\n| `channels` | String | Which channels to apply the filter to, defaults to `rgb`.  See [Channels](#channels). |\n| `clip` | Object | Optional clipping rectangle (see [Clipping](#clipping) below). |\n\nExample use:\n\n```js\ncanvas.posterize({\n\t\"levels\": 4\n});\n```\n\nPosterize is implemented using a custom stair-step [curve](#curves). \n\n### quantize\n\n**Live Demo:** [Quantize](https://jhuckaby.github.io/canvas-plus-playground/?t=load/eyJpbWFnZSI6IndhdGVyZmFsbC5qcGcifQ%3D%3D&t=resize/eyJ3aWR0aCI6NjQwLCJoZWlnaHQiOjQ4MCwibW9kZSI6ImZpdCJ9&t=quantize/eyJjb2xvcnMiOjEyOCwiZGl0aGVyIjp0cnVlfQ%3D%3D&f=png)\n\nThe `quantize()` method reduces your image to a fixed number of unique colors, then generates a palette and converts the canvas into [indexed mode](#modes).  This is used for saving GIFs and indexed PNGs.  We rely on the awesome [image-q](https://www.npmjs.com/package/image-q) library here, which is slow but produces beautiful results.  The method accepts an object containing the following properties:\n\n| Property Name | Type | Description |\n|---------------|------|-------------|\n| `colors` | Integer | **(Required)** Number of unique colors in the palette (2 - 256). |\n| `dither` | Boolean | Dither option for quantization.  Defaults to `false` (disabled). |\n| `ditherType` | String | Dithering algorithm for quantization.  Defaults to `FloydSteinberg`. |\n\nExample use:\n\n```js\ncanvas.quantize({\n\t\"colors\": 32,\n\t\"dither\": true\n});\n```\n\nQuantize should always be the *last* filter applied before calling [write()](#write).  Calling any other filters after quantization will convert the canvas back to RGBA mode, which is likely not what you want.\n\nThe supported dithering algorithms are `FloydSteinberg`, `Stucki`, `Atkinson`, `Jarvis`, `Burkes`, and `Sierra`.  They each have different trade-offs, and produce slightly different results.  See [Dithering Algorithms](https://en.wikipedia.org/wiki/Dither#Algorithms) for more information.\n\nNote that quantization includes and preserves alpha transparency in the palette, unless you first [flatten](#flatten) your canvas.\n\n### quantizeFast\n\n**Live Demo:** [Quantize Fast](https://jhuckaby.github.io/canvas-plus-playground/?t=load/eyJpbWFnZSI6IndhdGVyZmFsbC5qcGcifQ%3D%3D&t=resize/eyJ3aWR0aCI6NjQwLCJoZWlnaHQiOjQ4MCwibW9kZSI6ImZpdCJ9&t=quantizeFast/eyJjb2xvcnMiOjI1NiwiY3J1c2hSR0IiOjE2LCJjcnVzaEFscGhhIjoxNn0%3D&f=png)\n\nThe `quantizeFast()` method works similarly to [quantize()](#quantize), in that it reduces your image to a fixed number of unique colors, then generates a palette and converts the canvas into [indexed mode](#modes).  However, this algorithm is approximately 10X faster.  It does this by \"crushing\" (a.k.a [posterizing](#posterize)) the image, optionally dithering it at the same time, then simply building a palette of all unique colors.  This generally produces lower quality results than [quantize()](#quantize) (depending on the image), but at a fraction of the CPU cost.  The method accepts an object containing the following properties:\n\n| Property Name | Type | Description |\n|---------------|------|-------------|\n| `colors` | Integer | Target number of colors in the palette, defaults to `256`. |\n| `crushRGB` | Integer | Optional starting number of posterization levels for the RGB channels, defaults to `16`. |\n| `crushAlpha` | Integer | Optional starting number of posterization levels for the Alpha channel, defaults to `16`. |\n| `dither` | Boolean | Optional pattern dither, defaults to `false` (disabled). |\n\nExample use:\n\n```js\ncanvas.quantizeFast({\n\t\"colors\": 256,\n\t\"dither\": true\n});\n```\n\nThe Quantize Fast algorithm will begin by crushing the image at the specified (or default) posterize levels, and see if the target number of colors was achieved.  If not, it will crush further by reducing the posterization levels, and keep trying until the palette size is equal to or less than the `colors` parameter.  To optimize for speed, depending on the image and with possible quality loss, you can change the starting `crushRGB` and/or `crushAlpha` to values below 16.\n\nIt is important to note that Quantize Fast may not achieve the exact number of colors you want in your palette, but it tries to get as close as possible without going over.  The algorithm builds its own palette based on the total unique colors after \"crushing\" (posterizing) the image.  You can control the level of posterization of course, and adjust it differently for the RGB and Alpha channels.  The higher the `crushRGB` and `crushAlpha` values are, the more unique colors are produced.  Also, while dithering is provided here as an option, only a [pattern dither](https://en.wikipedia.org/wiki/Ordered_dithering) is supported.\n\nNote that quantization includes and preserves alpha transparency in the palette, unless you first [flatten](#flatten) your canvas.\n\n### resize\n\n**Live Demo:** [Resize](https://jhuckaby.github.io/canvas-plus-playground/?t=load/eyJpbWFnZSI6IndhdGVyZmFsbC5qcGcifQ%3D%3D&t=resize/eyJ3aWR0aCI6NjQwLCJoZWlnaHQiOjQ4MCwibW9kZSI6ImZpdCJ9&f=png)\n\nThe `resize()` method scales the canvas to the desired pixel width and/or height.  Several modes are available, to control how your image is scaled to fit the target dimensions.  You can also control the gravity (alignment), direction (e.g. shrink only, enlarge only), and anti-alias settings.  The method accepts an object containing the following properties:\n\n| Property Name | Type | Description |\n|---------------|------|-------------|\n| `width` | Integer | Desired canvas width in pixels.  Can be omitted if `height` is specified. |\n| `height` | Integer | Desired canvas height in pixels.  Can be omitted if `width` is specified. |\n| `scale` | Float | Optional scaling multiplier for the canvas.  Example: `0.5` for half size, `2.0` for double size. |\n| `mode` | String | Resize mode, one of `fit`, `fitPad`, `fitOver` or `scale` (case-insensitive).  Defaults to `fit`.  See below. |\n| `background` | String | Background padding color, for `fitPad` mode only. |\n| `gravity` | String | Image alignment, which can be further adjusted with offsets.  See [Gravity](#gravity). |\n| `direction` | String | Resize direction restriction, one of `shrink`, `enlarge`, or `both`.  Defaults to `both`. |\n| `antialias` | String | Resize scaling quality, one of `best`, `good`, `fast` or `nearest`.  Defaults to `best`.  See [Anti-Aliasing](#anti-aliasing). |\n| `offsetX` | Integer | Horizontal offset in pixels, defaults to `0`. |\n| `offsetY` | Integer | Vertical offset in pixels, defaults to `0`. |\n| `delta` | Boolean | Interpret `width` and `height` as delta offsets, not absolute values.  Defaults to `false`. |\n\nExample use:\n\n```js\ncanvas.resize({\n\t\"width\": 640,\n\t\"height\": 480,\n\t\"mode\": \"fit\"\n});\n```\n\nIf either `width` or `height` are omitted, they will be extrapolated from the other, maintaining the original aspect ratio.  Here is an example which scales the canvas down to 50% width, maintaining its aspect ratio:\n\n```js\ncanvas.resize({\n\t\"width\": canvas.get('width') / 2\n});\n```\n\nActually, you can just specify percentage as a string with a `%` suffix, which has the same effect:\n\n```js\ncanvas.resize({\n\t\"width\": \"50%\"\n});\n```\n\nYou can also use the `scale` property as a shortcut for resizing both dimensions by the same multiplier:\n\n```js\ncanvas.resize({\n\t\"scale\": 0.5\n});\n```\n\nWhen `scale` is specified, it replaces `width` and `height` with dimensions calculated from the original canvas size.  Other resize options such as `mode`, `direction`, `gravity` and `antialias` still apply normally.\n\nHere is a description of all the available resize modes:\n\n| Resize Mode | Alias | Description |\n|-------------|-------|-------------|\n| `fit` | `contain` | The default mode.  Will resize so the image \"fits\" into the destination width/height without exceeding either value, and maintaining the original aspect ratio.  Similar to the CSS [background-size: contain](https://developer.mozilla.org/en-US/docs/Web/CSS/background-size) rule. |\n| `fitPad` | `letterbox` | This mode scales the image similar to `fit`, but then adds background padding to fill in the extra area (if any), so the final image size exactly matches your desired dimensions, but the original image aspect ratio is also preserved.  This is similar to [film letterboxing](https://en.wikipedia.org/wiki/Letterboxing_%28filming%29).  The `background` property controls the padding color, and `gravity` controls the image alignment. |\n| `fitOver` | `cover` | This mode scales the image in such a way that it fits \"over\" the destination width/height, covering the entire area.  The aspect ratio is maintained, and the extra content is cropped off.  This is similar to the CSS [background-size: cover](https://developer.mozilla.org/en-US/docs/Web/CSS/background-size) rule. |\n| `scale` | `exact` | This mode scales the image to your *exact* specifications, ignoring the aspect ratio, and distorting as needed. |\n\nNote that resizing regenerates the underlying canvas object.  It effectively creates a new canvas at the target size, then copies the source into the destination, applying the resize at the same time, then finally discards the source.\n\n### sepia\n\n**Live Demo:** [Sepia Tone](https://jhuckaby.github.io/canvas-plus-playground/?t=load/eyJpbWFnZSI6IndhdGVyZmFsbC5qcGcifQ%3D%3D&t=resize/eyJ3aWR0aCI6NjQwLCJoZWlnaHQiOjQ4MCwibW9kZSI6ImZpdCJ9&t=sepia/e30%3D&f=png)\n\nThe `sepia()` method applies a [sepia tone](https://en.wikipedia.org/wiki/Photographic_print_toning#Sepia_toning) filter to your image, using a custom curve.  This is a commonly used filter which gives a photograph an \"old western\" look.  The method accepts an object containing the following properties:\n\n| Property Name | Type | Description |\n|---------------|------|-------------|\n| `clip` | Object | Optional clipping rectangle (see [Clipping](#clipping) below). |\n\nExample:\n\n```js\ncanvas.sepia();\n```\n\nThis is equivalent to calling [desaturate()](#desaturate), followed by [curves()](#curves) using the following properties:\n\n```js\ncanvas.desaturate().curves({\n\tgreen: [0, 108, 255],\n\tblue: [0, 64, 255]\n});\n```\n\n### sharpen\n\n**Live Demo:** [Sharpen](https://jhuckaby.github.io/canvas-plus-playground/?t=load/eyJpbWFnZSI6IndhdGVyZmFsbC5qcGcifQ%3D%3D&t=resize/eyJ3aWR0aCI6NjQwLCJoZWlnaHQiOjQ4MCwibW9kZSI6ImZpdCJ9&t=sharpen/e30%3D&f=png)\n\nThe `sharpen()` method applies a simple sharpen effect to your image, using a custom 3x3 [convolution kernel](#convolve).  It accepts an object containing the following properties:\n\n| Property Name | Type | Description |\n|----","readmeFilename":"README.md"}