{"_id":"gesti","_rev":"76-ea693b6fa5d47e7565e1bb7f2fc318f6","name":"gesti","dist-tags":{"latest":"1.4.54","beta":"1.4.53","alpha":"1.3.98"},"versions":{"1.0.0":{"name":"gesti","version":"1.0.0","description":"一个运行飞快的前端Canvas贴图工具","main":"index.js","scripts":{"build":"rollup -c --environment INCLUDE_DEPS,BUILD:production"},"author":"","license":"ISC","dependencies":{"gesti.js":"^1.0.0","rollup":"^3.15.0"},"gitHead":"840645fa8955e95e8723777b550f194e2d469054","_id":"gesti@1.0.0","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-6fQmpCxXNWQqmmXIS5nHMcvg6o7LFiMKtvX6LkZbij9wB9oEQy/AWHmZDOe7iigiWrvIljO9AXnWKuChdrPhRg==","shasum":"0654f65933cd9690a1c8c05e5bfa9a81dc7343ff","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.0.0.tgz","fileCount":24,"unpackedSize":569327,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCEytRX7Lf3we/0C3OeMdGuZB30o1VDHImoeVlupYXdAwIhALPSucRzMmFZ01+SiBqXvyQlK+FCyvuAT1tmnorcll7w"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj5wGjACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmootg/+PT5zndgRj8wE8ozugGeHD4I7+fI4nlVEj4kBIKQiWyCkIbDq\r\nOpxsBBBLv0X3NGdudhcrMqxIRWrLdCkQsAHQY9V289gjb43RB2ENcYoYOroq\r\n/jESF/jupePOYXtx0PjTQkBDxvLZFg7sPJKbBJuZbjBQDofYaieB5/VzzVKS\r\n0D5kUbp4GQ7fOiZL7rHpBsF5kSpJ3URQx6uXiHhFdGumwOtyejGQsYsTJAsg\r\npm/oXqhGLQ5GnHsQwLqdrr88CMDgaxjVzCXRL2q8bomB8lSd0gYIeqCgJ8DM\r\nkKpbappxlZGY0/hvizPGK7UxxhiY/ZWscwKAkLNh8TaZAywgSiK1C3HpOWWN\r\nEWiYwFbKx88LgxzsWTJ/snrrt6TfkYXUxo77ZDsY744uJfBqYBfugeFB8ga7\r\nPxbkmSa/iKkcTQt89OHsVFIJ79A7w/ydORaNrbTj+c74M10TlPxWNG0GIG24\r\n18MpJRGscP95oWFvYcPABQw7iE/Hio0LxfgW4v4/aX0mKQHY2jVN2CPQ5Yei\r\nyceKWdG+YP812EGi8D/dmbAGkVVikQYcz59JqKpeQHVr93n07T6Yef5OhCNv\r\nyOZ6LY4/1GCnWSt7jSA0BTN6wtxTOIv7XjaDMvPFMZCHkSqriWeMA+9FUF4L\r\n0JZgvcG9N02IV2rfPABB1Ys6uHjkzBt0rdM=\r\n=mpkb\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.0.0_1676083619659_0.055615951277463216"},"_hasShrinkwrap":false},"1.0.1":{"name":"gesti","version":"1.0.1","description":"一个运行飞快的前端Canvas贴图工具","main":"index.js","scripts":{"build":"rollup -c --environment INCLUDE_DEPS,BUILD:production"},"keywords":["贴纸","图片贴图","图片旋转","图片","贴图","头像"],"author":"","license":"ISC","dependencies":{"gesti.js":"^1.0.0","rollup":"^3.15.0"},"gitHead":"840645fa8955e95e8723777b550f194e2d469054","_id":"gesti@1.0.1","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-jxlogKlasRtjCT5kcgCareUsyAf2HwnLazQ2odZY94nnHu3gklpSbo1VGKdagmAePoUdmkWQ+hVxsxfFhHWZkw==","shasum":"2a30de0a785cdfc74d5440dc14af7acbfd39de11","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.0.1.tgz","fileCount":25,"unpackedSize":569581,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHBd4q0H66PbZONt8+JU0IHz8EmhhsQ44u0ktg3injLRAiEA8yFEet/bt8bZKs4SkT9yLtPb4tsc+jECXDuXv0tVCiw="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj5wceACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmonPhAAnNnmapXVjC83IpsLbUyNR+UBWt6RvvV/KYoyN+7hyOMAhCBl\r\nxflxPZhRYAGgz0/7f1xcOIquM1hVVZ43Jvz/jxPN0tIVW+NvcyrTn2sYunJ0\r\nCrnVhR6px9OwK7IxMlNX3WDluLy1ofURbXqespvhFnfVKWuBwA9xi5Y2RrIo\r\nxdiPuV2+aNYnUPu2suxctVzpRwqSnpI+iZDrZtTNT6HWYq6Cz6qLPVFzhME9\r\n1hMNxwpAWTf5Ltllrjnt78a3oEDV/D/o8zxvB53WKZa/fM4iPg+dvXqO36PL\r\nJw8a774bGb3/Q/VEurUTLly4v57HDcS2UXyBwmN7nc4Je+c3/JMbKx6Mq3Tj\r\n/yO8feEnhC32lStErYGnGYZ8PUFe+mb1B4g7ou1yZf33sAL+7wRk18Oddlat\r\nm4CEC4YmA/5tQ+a3rYUnp3By2hLkc1pUHxUckVpHO03adUvGFDYN9Z+QEY1A\r\n4WsyQwEWPRhFCqIBhJ9OarmP2qJXqTGsMZs7+i1DKxWCrfC6sH3zpGq8ia3Y\r\nyt1FyEv4ad5K1XYNJKxTc7imhxmsUMRn1empT3rmt+TqxgIcrxRRs9IjYXD6\r\nk4cFiO1JfDwF/MfryF4EjPbXKa/+jDYXuUaVRaH1dADvzGMgSgh0DaBM2eAy\r\nqhmYmqU2Darf92OfhRqkJqDNjfCX0BKCTAw=\r\n=E0hU\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.0.1_1676085021766_0.594185697415355"},"_hasShrinkwrap":false},"1.0.2":{"name":"gesti","version":"1.0.2","description":"一个运行飞快的轻型前端Canvas贴图工具","main":"index.js","scripts":{"build":"rollup -c --environment INCLUDE_DEPS,BUILD:production"},"keywords":["贴纸","图片贴图","图片旋转","图片","贴图","图片拖拽缩放"],"author":"","license":"ISC","dependencies":{"gesti.js":"^1.0.0","rollup":"^3.15.0"},"gitHead":"840645fa8955e95e8723777b550f194e2d469054","_id":"gesti@1.0.2","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-4azbBrCYXL83KlFDmU2xMcWQTx8/v3r4BS/jWeas0amDt+JAXduXaeyVngL61BD8URtLMalRCW8OZFkbkWijsA==","shasum":"cc62e3fa77f6eec8ed76bd376fefed7d0395e03d","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.0.2.tgz","fileCount":25,"unpackedSize":569578,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCnEwvYMytwMM5U3Yx6jZtmnx3CupwcMk+Z3WjRY4Ur3gIhANvVrSlaqQbzuU2+aqUwodFX0BoQ5A9gVBcwKkEVqhIV"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj5wo9ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrTKg/+NRGFjCBQiBHy8Uw6jNKLdEy7fOLLfA2xzf8HWo5H8DCnQCaL\r\n8HRHtpdRFJn7NV8J/CtBg4VO+8MIorh3/IlKgtVh6AZEYqtr1P1yGMfqjXOH\r\nBaiepjcuYtp//IbVOF8lLzjysI1d9saZqfHevosTR59QOixaaJe1XIYtRYMa\r\ndUTP09DImOhVVDOFNkA/ffgGEm9GjUe+5ravXFx22Pc6h7LZjXbCzbTlWfJv\r\nzwxIRQtr1mdJm6l+9z5wrZfJHhvptrog6hI5U7DZXtkmjRx2Oulz6WNSZv6w\r\nOT8SLE3Vs8Jqk1X+ywDunWD337dTQMCTDexpS66tq/drK1MjddyjdCKD8Dbg\r\nP5DPY6NQJybJjv2xUcEBenMDVcTibtmYbiT7kGUEiwXcRoV0kM/MOJURyhi6\r\nCLu0Zg2astBVeV9H/kjf5G5j54t5JuyBaQ3BYnY7HYXnKXKo2uteL5h2n59e\r\nqWwsH3bWCgQWjq3fDs/v+KIh9FVwRS9vg7VypO2QTVcVIfqbkjT2rBrNdyPA\r\nTBSXiqLjKc4zv4rnZbJpVxGUFZc7o3q1mqbnawqEGHjO5I559tcQ6Czb9kxc\r\nJWNmik9V0AFSTxZ6UtSeQdBwYzj8XuJf2HfNXrdglcY0jCF8q3UEoFHuHExU\r\nMnPFvLV/7uUbIXKJPN8z35DGafUgp3qCGrI=\r\n=b1cY\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.0.2_1676085821309_0.4587817045464686"},"_hasShrinkwrap":false},"1.0.3":{"name":"gesti","version":"1.0.3","description":"一个运行飞快的轻型前端Canvas贴图工具","main":"index.js","scripts":{"build":"rollup -c --environment INCLUDE_DEPS,BUILD:production"},"keywords":["贴纸","图片贴图","图片旋转","图片","贴图","图片拖拽缩放"],"author":"","license":"ISC","dependencies":{"gesti.js":"^1.0.0","rollup":"^3.15.0"},"gitHead":"b451a7b11545db929426810a3de9c85679950384","_id":"gesti@1.0.3","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-lwkWeMydPAUKFwQ0PM8CbI1M35pOwqnfevx3B4EJxkII6kWmDxCLAUPGxDbXDLQecOHG6j2lLAU9fhhKKQzJ2A==","shasum":"859b5546d1db7ce1d04d7625b4a7781a98f164d8","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.0.3.tgz","fileCount":25,"unpackedSize":574022,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGx68iM7WyuBBEYz7LriGppwjCLb12/a+7ouLZn3TuVyAiA7XE9LEjBcNjBQXnnynNrr8puD/aPepwRH9sAEBMR+bg=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj50RCACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrCrA//TRr724aqkHtr/XOG6XPaUr+NGG/SqZhoOvxMNlB65ELAizMp\r\nzUYgIJ1A5hkoxy8ao/LVijlbMPTPDAbTqiJ1pCiFGzQFD1agcXAqgZy509uk\r\ngkTdg55LhKfnthfnmHHbaY7zG5goM11KKp6Pp1Zr5bc4RSkZcpG4hC02Sao6\r\naSXHXwxBFMwfBss0lUcKrwzZ7JSQ26M2JrQwYkCLNz8lP2j2jbb9En6nmDPo\r\nTTZVt38odFwfj5dxUe4vatrWUZEJQeSVV6D9F7e5GNw++MOPYIMTkM0DHr6D\r\nuZabyki280C4H7UJu1XF/EQOgeLWymIno+ns893KYOGD0eJArVU8dPqDro8+\r\nuXtehdhXleAYDMY+7S1QRDXzrZN+bWKYApKecR3zb4bfzRQJxDlB16HHAbAk\r\nsRBnXBcIO3Iu2nskYuB3ueLkkxGp531joKy3AhMGXUl4YQc4wSI0kDxBgqnY\r\nh/K5usju2g6D/T23u/w5gyUNteAE5f68CMF8wjyfDXzd+zYcA5iIb6Xv0V7t\r\nI96RSILHladgD8rN7V2D3f89Yie+0ebgDUcsRdVU01okXFQqM83b4ARZN21k\r\nL0+S3qEdKnW7JzAe/Y38Dd2T0vkUGNwnGvvEOoEpOcWbIffO2pSFYAVeo0dL\r\nJtlbKpc2DiQIo9LXK1t+XQ8DnLojjK3ll20=\r\n=n+YN\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.0.3_1676100674308_0.7469639676007909"},"_hasShrinkwrap":false},"1.0.4":{"name":"gesti","version":"1.0.4","description":"一个运行飞快的轻型前端Canvas贴图工具","main":"index.js","scripts":{"build":"rollup -c --environment INCLUDE_DEPS,BUILD:production"},"keywords":["贴纸","图片贴图","图片旋转","图片","贴图","图片拖拽缩放","轻型"],"author":"","license":"ISC","dependencies":{"gesti.js":"^1.0.0","rollup":"^3.15.0"},"gitHead":"b451a7b11545db929426810a3de9c85679950384","_id":"gesti@1.0.4","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-NgqZuB40+M9eKEFPmAGAqz2WWHVvHtSmGvFjNajTqqI9o4E31RpVcN8dOaLmHGfZs04U/UscNGJ5lk4SwBVwKg==","shasum":"4d549cf6918987c63b16aee4d95ac1d8a850d2fe","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.0.4.tgz","fileCount":25,"unpackedSize":574045,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDhbiEAOfUNejY8k1MXLSg8UflzjYV6toW6eeiwsBvcowIgfSwrmwGgBQK/HWFy7n0AbWOxt8pwISGoEUo8xftwJog="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj503iACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmoanw/+O3UjzcPIipeM31GCfCp5vZbPiheNYsumnosu5oC6fnGABkvo\r\n33mbKF7cQBdi9Z+A7gQflpB0AJAVHQ6I3CT6VaQS1pVHdEYiyY+HWqpUXyuJ\r\nRSb+TGOtRYk7N1kG1DiIJN6H5tFxQpn21SIiosXa1sQbXFpj8gaP6AXeg+Yc\r\nXuNsqrOLLrVBqyCi+5wda41FwOf1gRBjM68T0iM33a0mo3cimBK8ECmbSnwX\r\n0KPsIs1e6KRYKrlPisqaBvmetw2YZMKtJuWHDrM/49fZrD1saAJf+WCNk09C\r\nETyUN4CAsc2lZEIFwotpaB89u0wn5lRRKY9x+/wa0HssvZyYADAGJEuaJ+Xx\r\nd/8TbEqTKzCVXxUrtvy68G/Y4JzigtI1txlrcguYXZEZmlsXlmG91i2deQFC\r\ngAUIwIci3+Z+DgzPqmSAQcWupOedOO1/d3RKnSJyVl1dxUnSHN0/lBokhOsk\r\nptvjmYd9buUk6ZE4MEqd8kAG4PtUKJ56rK8Jw9h9hG2Z3Wp7oAkzcDzRice0\r\n3M9qPPO5mBBgVxMd3rxQqsJbpf1afgdI24GcED9CefmnlS/cVpKDlkDI9SEX\r\ndns2bAzEyNU9H1alfyyK17bZak2gxr/KuMjRivt3JW17PZfhvcKZJDK2rgXS\r\n5KONOJ7UuWeevMMq6TwsWR4bWbwCFIdO5fc=\r\n=Znmu\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.0.4_1676103138009_0.028074515588734972"},"_hasShrinkwrap":false},"1.0.5":{"name":"gesti","version":"1.0.5","description":"一个运行飞快的轻型前端Canvas贴图工具","main":"index.js","scripts":{"build":"rollup -c --environment INCLUDE_DEPS,BUILD:production"},"keywords":["贴纸","图片贴图","图片旋转","图片","贴图","图片拖拽缩放","轻型"],"author":"","license":"ISC","dependencies":{"gesti.js":"^1.0.0","rollup":"^3.15.0"},"gitHead":"143f90b12d7ca62136588dd9cf3060f60c46b525","_id":"gesti@1.0.5","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-pUKdA+3GsQqk3LVFUvXLTd6iZ5jMhmaFKS8kFQ6h0vndoq8LrnJLG4eEb4PmjfRNZZdV9adeUAbGc1uQyKw21A==","shasum":"aceac635bbfbe659a47db5f2980260870fd1a918","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.0.5.tgz","fileCount":25,"unpackedSize":574793,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCzFCvIrg3uEHscxt+I1GLMIYC73ckrLkPFHbjCsKKXUAIhAIoTS/ijl5QxFHoXOcERLJW6g/Eyxx89BxV06Xk7k+ZW"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj52q6ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpeDg//ZOEOaJPzm9o/Y99USErNEY4owUIWghvhIVlRGs/YhHNsnCq7\r\nV89g1pTcss4PKakNml7lzeeAtEjbA/xpR+PZNagIrMW4GnQF6zdbL2Dmh4LI\r\nEfbuxxmRzamvVDFCVSJxPQDu34RO5XiiECErpIbR2Y4h+Y1rZpbNeNpe9mJK\r\nNxja4ypIDzvoqWN6Lep55iT7A8Z/WGL7l61/7O7tQoxlkyZf6sRvISlFrKy/\r\nzK4YKwFqQID0oAYBxP14jkC3XYOUczou8zo1V8rBz7ugee+1qGnTD94kUwk9\r\nctUzNQeW6zO3O5oQNaWdyhU6MBBcSoO4Hf64EfG9Fw6qLNOZ1CIJvyBnLgh5\r\n+HVePLP/bP6NSXpnSucVm7zffLDz7HX9u8qDLACABkbK/FUIk75+wUgDfixB\r\nA3e7GMdtOiEa9chPYyB6cHvo7b1/XH4yOzP4Sv9GUty8IuY3ICxPZyZXH/oV\r\nax12pEHH7LsepfvuYtTGKPaJFqLKOMJrDqf6KrT3P6TOC5HA+o5ix4W8lAWF\r\nCJhRwBwyxaJ1ILD/CH6FMVdrXTg1d6MVeOdderCWd9RcDaKolT161WxupjP2\r\nLtKiQM+uMK1Ia0VQU9DH8Y/6cUC7p/k1EUPs1gnkjyY8v/hOmij9akFr9EuG\r\nJ//G5Bordbe3Xsftc7y2cJOTAlNlBFtEYek=\r\n=rBzR\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.0.5_1676110522229_0.601055016248055"},"_hasShrinkwrap":false},"1.0.6":{"name":"gesti","version":"1.0.6","description":"一个运行飞快的轻型前端Canvas贴图工具","main":"index.js","scripts":{"build":"rollup -c --environment INCLUDE_DEPS,BUILD:production"},"keywords":["贴纸","图片贴图","图片旋转","图片","贴图","图片拖拽缩放","轻型","微信小程序贴纸编辑"],"author":"","license":"ISC","dependencies":{"rollup":"^3.15.0"},"gitHead":"77eea44c208a2a795bbd66205ed15b2ad35d29fd","_id":"gesti@1.0.6","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-S6GIHPz4kfj3HchZtQxSPs0zeggCavQo3ebfG8TyMndSGZLJbC4gt0TuCx32ffB8KLtEohVhP+1CIPQGouaVbw==","shasum":"548d0097701ecaf63f9b5b3ac6550a7d33c6fdc1","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.0.6.tgz","fileCount":25,"unpackedSize":577899,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICswnQjLzqEXrYEf72SffvSFjpmC5qmfHdCLyCcCKq4AAiEAzZM6t4rUBIu4X1CVHq41/gzggZJZXyUYTQgmmtsTrf0="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj6a4AACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqQBhAAkdJc2zjvNX6EJZgJAXpI5Ep3tzqtrxrOKDZa7HZHRWkrBSyU\r\ne2sNOTqbRN/i75/WmcQH5sAQeY+BNEt6sxt5eyaT7/zQfR22ly3hM/8a38ew\r\nqjkFasmEN6OumKyD9rD7BoU2vyFpVNarNzcfpB5aXw4KR0Q/+avqKFQpyNmc\r\n6BkqrOU2RZiY6oOOvip6GcJWWS5lbHXsn4l2UKWlt9VI43DBkLOP51i6oxXR\r\nxYVgS7TpdVQOAI5IPVtmeK3chbkR9tIOfi3QMkHHTLWgB71BwXu4Jggc4vyX\r\nKyWprljZx8PlR23236uGJ1efANpWopV7/5nl565IdwUwaXNrBaWbABjt9YAO\r\nfJHgu0gyGRkFjcIpm724btoxVxjXcbv/0dPITmucudq/4RdTtjPpSR50C/kI\r\nN9Ia9ZbvJBdnGQDJv6xMKMPKOWUokMCN5P8umB0V4umqH9t9u7uSvv+vnj3V\r\nU+NtNs7skOk+Nn1SmDyqzAyqlxlCQ0dhYs/GZxmBDyKYDv5lhJv39i1P0Vw0\r\nhJOqKrWSeMupDbJNTQHP7decRpdhlXgrxUsJpEN8FxZrh4wnYBrv8/Ua74EF\r\n0vylZg/HUDdLMTEQ+rsEWCtfkzRPDPWt4KTYMVgmAVkE6QpcIr5pzgJlgK36\r\nf6Tz1/tsuFkNpYfogTGi2pLUlIX8fQslsOc=\r\n=WsI4\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.0.6_1676258815898_0.6154000226249334"},"_hasShrinkwrap":false},"1.0.7":{"name":"gesti","version":"1.0.7","description":"一个运行飞快的轻型前端Canvas贴图工具","main":"index.js","scripts":{"build":"rollup -c --environment INCLUDE_DEPS,BUILD:production"},"keywords":["贴纸","图片贴图","图片旋转","图片","贴图","图片拖拽缩放","轻型","微信小程序贴纸编辑"],"author":"","license":"ISC","dependencies":{"rollup":"^3.15.0"},"gitHead":"3fec95bf3113d8e53206f5a82b3782323b8eacda","_id":"gesti@1.0.7","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-5wkM47yyU515TJrXntnYCRjPjwdmvA0s0YLQQFYt7qZVaYuv7TBenDNLzg5qL50PZlUai0CmEeOkBCHxFSiG3w==","shasum":"91816f3346f5ad524aaa2b3699e0a2413e7c7b57","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.0.7.tgz","fileCount":28,"unpackedSize":594197,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDvo6mKEQa23Ghf09qB54yXlOz3Xn33hBHnD5K/K8UnIgIhANMLAxvJxwzy/3zjnaWw9XCWEpHeNmNS/T2mMzf+OMPu"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj6gJWACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqwGQ/6AoGlfUaEBGuKmm2BG4zXH8Jmy9sGoH/qNxyR+cGYkAQj+XEU\r\nRG++SGa+RvJLotAlHLUcg4TN6S2qaZZkh20h6udzuTKsIs98PQO8zLBjCOt7\r\n+eKca5mQ7HXD0QVQpTDTtERNyHNAyrXtM/mKFoVP27+74lSk450b08qgUlNM\r\nZ3aUERt7UoRTLVpjiJFcqeyAW9PS1Hst+aIdXecYm7DQ381xQn8Mbqo54KNL\r\nfogluLn4zigEqFzBmtNR4iiuTJVnd5hXzXqnun+55Taw53OEaaFG7xKPSI94\r\ngGPbzETYNdFDqsWvmkW7LCsGkuT6hTZHSSphECWpeSmMpIBPp1T7kibdkzXH\r\n07s/YctzeLLGr+pzVWbxX5Nn+QzYk/FzQrMH7w4tgyHLIhJgNeGcjLbFAPvq\r\nKx5zKKfVGN3xBrzZrF3JGTIFD8pg+VipAyjMpA/Uo3iDE9s+Vll2WKPbPMGt\r\nNoClZ58NV5P2TUSVHfHEiSfgjRKC0oe6HN/HB/kIj+fYu7Ttc19YyFUh10vA\r\nHEAvHCflKkxiKkLrS5XO59ssdYrrMrML+ERcsp79KMXgNoi7wssB/BIGMkNo\r\nmKFas79tavQ1JferW9OOMaAcPreZw2byNjIxcKczEB3eCtd2QzJhdLtvNQuY\r\n3QRWp8Qbmb/b1fR1+T88o9+7AbRbVBWMrZQ=\r\n=Gc2X\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.0.7_1676280406668_0.4557301398253726"},"_hasShrinkwrap":false},"1.0.8":{"name":"gesti","version":"1.0.8","description":"一个运行飞快的轻型前端Canvas贴图工具","main":"index.js","scripts":{"build":"rollup -c --environment INCLUDE_DEPS,BUILD:production"},"keywords":["贴纸","图片贴图","图片旋转","图片","贴图","图片拖拽缩放","轻型","微信小程序贴纸编辑"],"author":"","license":"ISC","dependencies":{"rollup":"^3.15.0"},"gitHead":"bd970d7feb669e4964d2487daab1a8e5bcbfbd2c","_id":"gesti@1.0.8","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-DdnpZKgGS9tf0vauxB0RzrV0oZ3Lz03uNPFQ3dhnFOQXarvNXUzcwzAdTmZLhOwFsZmFfefgLXrnMlu6oqon3g==","shasum":"189f36f40ca1e97be12c1032038d5810b3511f69","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.0.8.tgz","fileCount":26,"unpackedSize":582689,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCyBdxb66YJi94l8RJ3gi6/Bk9sJg2N1V6c6AzeZeZppAIhAKtsBndlrACcd8JNQZ8BbCEqxXLLRucgzL8+ZoLTxGzz"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj6gRAACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmodjw/9E4ILsPuYQ3OyIsJQmjsC6AuHghIAMsKZ9Q3gqPDeG4JORLJm\r\nTTvHZYkAlgNwTs5Ekqiic7IPgd2KzJkWipPLFZYiZeQeW/wvXQHIAIcKem3J\r\n36lnegsChfSKL/r7BOaooTBdTagwxhbhLTp6fK9ZWOTABilPXsCJJch+ySEb\r\nE7gzEc659G/wGRh3pX55spZTX5hOJK6d3HyNjlBLxRH1giB6WEPZ9/v9TqMI\r\nGuZn4qEYHWuHj61t/VJYXtiIS60yfxo2VniLqSKc3UspfRqJe1Ueab9+JEhc\r\nOzihT7bWec3c1pYiPeAnEDv4WVTmFDAv3yqa6sQ7ZqfCsKzItQt9X4MRERc6\r\nNKU13+wgmT9cWoJ/+aqWqPOxP4liW5wZMIF+yp0qhLH6jdQWc1ZgMVSXi2m3\r\n+WdUs8ssZMKAD27DTVDVRFJu9JFWaSzzG+0QhgMMx+H/D+lRTMnBV1D70spo\r\nat9xwX6dTw7+r7x3UqZkS6Nph/V7Jadd/k3OK9/F5fkZ0UgwGECsDf7cbRZD\r\nt916E4reDjLLHZIzczNm4Sr+vZaEVRtTCrv3hqGMCr+9dDVuksszubc3HSUI\r\nH1ayCoz8yG6YU4cY7zz3yAU6mSv1VyBBJQXvS0RcbSmsa3ShAM+cCue6bLjZ\r\ngGAkGpJYctUanLhlmuB76ZPr6FBhdRh/iAw=\r\n=M/kt\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.0.8_1676280895972_0.22210326699441807"},"_hasShrinkwrap":false},"1.0.9":{"name":"gesti","version":"1.0.9","description":"一个运行飞快的轻型前端Canvas贴图工具","main":"index.js","scripts":{"build":"rollup -c --environment INCLUDE_DEPS,BUILD:production"},"keywords":["贴纸","图片贴图","图片旋转","图片","贴图","图片拖拽缩放","轻型","微信小程序贴纸编辑"],"author":"","license":"ISC","dependencies":{"rollup":"^3.15.0"},"gitHead":"c018d72dbe4fbcf4942ee348e19a0ee3cc7bf3cb","_id":"gesti@1.0.9","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-9Ss3MH+nbg8cWeOyRrmSWEKZdzREXfXJneA9gAMYDVr05UiFdbbuqqfMeK/mcQSi92hLpuF0sPH0CyNsQo/hng==","shasum":"840c396c91e422427f6f4f2a8732b811e8ae5191","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.0.9.tgz","fileCount":26,"unpackedSize":583075,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHG05Jx1pGxLuXXmUq9qEHVvz//oE72hgY3ClL8ELqpGAiAFtswIx90QI5kpohZAQsD/Ikh39/in3Pqrmf2we8qCDA=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj6vsRACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoH0g//T8alTzkcDW+izQdxAWLJWFIm1K1YBm5ORHZ9YQ8HSKvbMK79\r\n4pWDO3PJraw12hHrPABrbCS6ZyYPcv/oZQGnv/MYy2VknmfL3vBpGPFP458q\r\nCWdzRRWvsF7jqlgb4pqwo4t9zF+8CzyYZ2lHfkexHTfoksZR4AkldLW6e2Vi\r\nyhuBgw+7rK5Q93VYxzh3OcHxX20RyKlngWMTOHzvhleBv0Frq5GPJOmQM2ZQ\r\nZo/GPoVLNQ63BawerqsholncC6PMEZ6tVLaQrn5bnu90tHA4bGWD125pfWbV\r\nkOu/32bpmTM+6ZSG+8M+o1VvOn/Cj5OQRidGusM8JdVodbo706MiIaRNg2FF\r\nwhlU2RlQt8xETtL5BykmTQ6i1hLjqemxcJvHKrgVjG1Vg83vyOiyLGhflHwE\r\nXf7lqF6Rif3cskNuVfHICR3N5fdGMxFnT2ws3NWQCWbsHK82UF4opQcmtGDt\r\nvPeJjdw2qy8xx1LeOZduvPtxXggX213sf99b2Kj9X+GncpXl//HxXEmnTooz\r\nAsP53WqWzQqSD+X/6AG3UXr6T1Zlb++C7RU5vhoJh1F2ZfA3b8RKKweIzRDp\r\n0m6KQKxuLJibaYlnSrQd6wpF7NUsCj9CkeJ37SJidebgXvpYN5oh6JaZdI3k\r\nlAUcQkal56J3dlfE/6go3KmASjWNSLsDawk=\r\n=xUgh\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.0.9_1676344081686_0.9861041713131966"},"_hasShrinkwrap":false},"1.1.0":{"name":"gesti","version":"1.1.0","description":"","main":"index.ts","scripts":{"test":"jest","build":"webpack --mode production","dev":"webpack-dev-server --mode development","build2":"rollup --config"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.cjs.js","types":"./dist/types/index.d.ts"}},"author":"","license":"ISC","dependencies":{"@babel/preset-typescript":"^7.18.6","@rollup/plugin-commonjs":"^24.0.1","@rollup/plugin-node-resolve":"^15.0.1","@rollup/plugin-typescript":"^11.0.0","clean-webpack-plugin":"^4.0.0","html-webpack-plugin":"^5.5.0","jest":"^29.4.3","rollup":"^3.17.1","ts-loader":"^9.4.2","typescript":"^4.9.5","vconsole":"^3.15.0","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.11.1"},"gitHead":"e396bd36f0ff444dc216af857ec0c95da15a819a","_id":"gesti@1.1.0","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-sdoTzo4qGJw2Iws59AHHmbzLalzbpNYSnyosk9Qy/ibRhn+jf4iEDe47io2gqPZ9j7mXEAsSNTw39E9ogVptyw==","shasum":"8bdfa340d325dce702e68a2fb880861c869d9aca","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.1.0.tgz","fileCount":35,"unpackedSize":101614,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHyl0K/yT+Y8gNtMCHFtunnaZVZ8oo0r96gHvxpLKoL8AiAb733OjZGVCXmfv6L3vAi0Z0cIk/Df5UhpkyuWhcNzdg=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj9YukACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmojmg/8CFZ5ckFyuMKvJOgHQPh/4Yt+ST/gAl+TT96KRrAGc5/sT0Zk\r\ndIbdogUDXmNk/TRZyPYhCUcM7J0Y9duuMCaQHJ4LnmyeCw4jI3epfMOFLjSA\r\nKmGmObFsIaIqngU74R8buWodVg61ldyHhFsDOxj55hAFem9v4oEZBrvn/O0h\r\nGrUhjA2Nd7Wb+TfBxJi2GDUBBz17cqnFBdqsw6//d3f4RsIjHp3QDpTvSOkz\r\nzl9jG7GDxP4ZXDK+dHN9fVtvczS822iuA9WKujq5+V1ERq9OYai3cp81Fchn\r\nhBVaYv8EIU3eOMfNeuR6gKVzV3kGKhhQ5VoazxkilLrvUgFSEu8aZpRKATqc\r\npUIDKr9uhWrdzBWU/1zfgNRBdJ4WQ2qXrgxsH7p+mtet5SKagJPbeACDvH9M\r\nEw0UMXtlJJ9uJdvhWHLirnGaYmo0CNDsqHaZ+m1LzG8+L/qWWvUaU7r97TXu\r\nmXyzObF1fFHI4SP8azZrS5+rkW+ESB23/XuuRPGSvEQetp/VnDRLEIDHKEEV\r\nCb/78nNCSd/E3nOSMzmQEoroIjSAUVLiE9PiehUM7efF7SWE9oCN3oBvX5im\r\nRAHA0T01UmdOXBtFMwzg3Qqp/Wk7zu+JxCXaa976SUHpc6HrJ8bOZtXnQk/d\r\ne6qUG3rQp7K25Qjc29RGgzvbWXUMwsdUSG0=\r\n=GryH\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.1.0_1677036452235_0.16010270262572912"},"_hasShrinkwrap":false},"1.1.1":{"name":"gesti","version":"1.1.1","description":"","main":"./dist/index.esm.js","module":"./dist/index.amd.js","types":"./dist/types/index.d.ts","scripts":{"test":"jest","build":"rollup --config","dev":"webpack-dev-server --mode development"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/types/index.d.ts"}},"author":"","license":"ISC","dependencies":{"@babel/preset-typescript":"^7.18.6","@rollup/plugin-commonjs":"^24.0.1","@rollup/plugin-node-resolve":"^15.0.1","@rollup/plugin-typescript":"^11.0.0","clean-webpack-plugin":"^4.0.0","html-webpack-plugin":"^5.5.0","rollup":"^3.17.1","ts-loader":"^9.4.2","typescript":"^4.9.5","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.11.1"},"gitHead":"e396bd36f0ff444dc216af857ec0c95da15a819a","_id":"gesti@1.1.1","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-bR+fBjj0SIp5P25irvKRe2scboBVvhkmSLaQC9PMn0kZgvd+uIbRVhyALTKbxMj/9IuSAI3WM9XWnQf7kZue0g==","shasum":"d52d53c5c3c2134491be6bc7128579ba96b91c3a","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.1.1.tgz","fileCount":35,"unpackedSize":101605,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAhkvu+j8k/SueXG/HykKKvljgiCSc1DAyDIoD40gLuHAiEAo1P2rz1kqcvnOnnUkQH1+ylYaDFyjkcTAjGwkw660Ko="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj9ZMvACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrHPBAAon7z1R4aOeq/5zpRgQPxoZY5ipC6EZdjnjYZl84ciR0N1abr\r\n8dFIhUkiNxn2ovINOqxl6LY8s8mGRIbz1XHrxeZBe/38fPlqQZA4sn1Alg+I\r\nxcH79dVx8EgKYBlYc00EiSQCtGsRNYz2cgQdzxjQwvG4SLnCVnopRe4tcPmL\r\nHsCs8JWH68o8fAL5eibrY8mvWKN17Rzh/00qjhaRSDOxIvVD1v5E/BO3n5Z9\r\nnMNnyplwISCZhpAQzymi1AGANRPLyUcZT7B+pyVJV7lgjmFoOa4Xmb8rFHL0\r\nYcUG8m3Lb73y+yBoKIP05Tvf9uj722e+18RIl3+ujSQpD1xs6nOtR/+orKZC\r\ns8NJfrz18+nzHcEFTzRr0aFrmxvNQGU/lXUxNBqEjdUOTrcAofGpT6zOI+gS\r\n846AC8i77hfoYtuyJ0tS1dWQeHjfbNW2vYKQMZYcH8t+fxWFiQBTfOb2x78D\r\n5CsOPtIslYCJoU5FTudaCZP3ZizxjLmhY0/GKE77EoQgua5rd9EgHUviLB8r\r\nRgHREW3vPBR0ZKLh6Yl8Uio4okpe8F0F/QfFpFQld8FaUFhIvW3VI2iZegWO\r\n+uLlCzsqgyVuT/gfzhineJ+BjbQ61wZeAJT2sRJUZIBtJ6SIohCC05ht9bTX\r\nFt8gREkVh8NMSDbHIp6w1QV1uq6uFMPx/vs=\r\n=ZwfB\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.1.1_1677038383636_0.102347900948067"},"_hasShrinkwrap":false},"1.1.2":{"name":"gesti","version":"1.1.2","description":"- Typescript开发，打包jsdk,灵活安装使用，不再为臃肿的操作烦恼。\r - 基于原生Canvas，兼容主流浏览器，PC端以及移动端,兼容微信小程序。\r - 拖拽缩放，移动端二指缩放，PC端鼠标缩放，点击即选中，可镜像操作等。","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/types/index.d.ts","scripts":{"build":"rollup --config","dev":"webpack-dev-server --mode development"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/types/index.d.ts"}},"keywords":["贴纸","图片贴图","图片旋转","图片","贴图","图片拖拽缩放","轻型","微信小程序贴纸编辑"],"author":"","license":"ISC","dependencies":{"@babel/preset-typescript":"^7.18.6","@rollup/plugin-commonjs":"^24.0.1","@rollup/plugin-node-resolve":"^15.0.1","@rollup/plugin-typescript":"^11.0.0","clean-webpack-plugin":"^4.0.0","html-webpack-plugin":"^5.5.0","rollup":"^3.17.1","ts-loader":"^9.4.2","typescript":"^4.9.5","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.11.1"},"gitHead":"0059cb0358346beb17818f20494d60efb4f939aa","_id":"gesti@1.1.2","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-IvAs6mwVaDnmhsyivdbFYz3KC4AgfffMaajAkezy7bM0mjvuv62G4z7eFtPVJ1NwtTbW0tHjwaaulRagX+X3+A==","shasum":"e436b2f584dfde9bfc4c6ce77742c51fb0a4606a","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.1.2.tgz","fileCount":36,"unpackedSize":107574,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCHYCflvIWTAZVBu2B053YQi2fVAhvTK5I+e+PTKjHgFAIhAKI+gqmv+FXFh8uu7r0S4GA4ExVojVG2eVsgFE+DYlk7"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj9wnHACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq3gBAAlBS/OcTAy/kkidcXi1jdf0ZvvwU1ix1feczJwF6e7D8jDuxd\r\nQwp1YPF3IDPxor+AogOXtxYLvOAKvohRBpbmEK1o1nr7t0Oravupobqna3IG\r\nUqq/6rihd7Cm50zQ+HaISwrfm9NvRJ6WBjToBXaOabmRFNB1ePak+b+Th/sr\r\nRQG1UoKzuxFVoI7ZNnt0m7msTKbnzdW/5dvP0/n/DqUuRnaMFgHZurqcVrID\r\nj03itGx+Ha2/uRMiB5OerS9b5kNbRGsxpVEcJB7276t31MXDk+NAgLQ1UarC\r\nI5N430o3XHyHfcjJoeY8fUxT8vp3PJH9BrMxqpRcUHVGVrKa29DoYFVBnZK6\r\nAGPNGS3lx0MA+RvMAn8WjurfcQVQmbBlWVIZuXiOTDI6vqEeH5yVtmVhtaSj\r\nSprvk9zxhwaxaKcowaZ6bh93IJa58UNK7iIaVpYlrxK3Yx6eEXzWQelfaxir\r\nESyk2oMHmlFAky1rtphejxhcx/Oa13MwaTNss8LbblvaL7phRwGKZfod2r32\r\nBbYG11FPQlW5WX8GNyn8fzODZ/tr6778cN4CFm2gr7DqJXAbxz/q+6xnblxD\r\nSQecvhevD0vDYri5v2b8D6vL8PRCbeJRtLk58jnTxvSMvjvT1NYqrtWsFIUL\r\n7lgdynEku5S8mvyjpsr0cE+22S5e0kDn5pc=\r\n=czts\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.1.2_1677134278842_0.02904362809509875"},"_hasShrinkwrap":false},"1.1.3":{"name":"gesti","version":"1.1.3","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/types/index.d.ts","scripts":{"build":"rollup --config","dev":"webpack-dev-server --mode development"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/types/index.d.ts"}},"keywords":["贴纸","图片贴图","图片旋转","图片","贴图","图片拖拽缩放","轻型","微信小程序贴纸编辑"],"author":"","license":"ISC","dependencies":{"@babel/preset-typescript":"^7.18.6","@rollup/plugin-commonjs":"^24.0.1","@rollup/plugin-node-resolve":"^15.0.1","@rollup/plugin-typescript":"^11.0.0","clean-webpack-plugin":"^4.0.0","html-webpack-plugin":"^5.5.0","rollup":"^3.17.1","ts-loader":"^9.4.2","typescript":"^4.9.5","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.11.1"},"gitHead":"17b743020a3e0929f2441af56eeb4686a0c3c431","_id":"gesti@1.1.3","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-taYyxGlr+9yhzcXOfrLocE+myFb8sGzMARaAk/ZGv5yXbO+pzLj1CVmT//hp10cEk9aN9aEjsrmc9ABJ3n8+pw==","shasum":"941661087e3a23e29bbc6735245e710fedd2bc37","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.1.3.tgz","fileCount":38,"unpackedSize":117785,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDe9PURSx9O/WtkA/fHl3n9AqKtj5dhIa3xnpY1IzuNEgIhANi8CSpcAGrvpd/obOUIo2fCEt6O9yc0UiJDSL5X2XVG"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj9zA0ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqs5Q//cexp435huE4X6VShGLT8yC0bLQV0pbQ40T0uCqFZAGXKlN+/\r\nZurNHWCdIiWG+u6X70UlB5lj6DUBV7WnDNJoxyeMUMZxGBGkUcstV+piu3s6\r\n2XmmrD0ZI9p83Wrx37e+AAeZcc6ZJ3c9BXjB7n0rhKnpTPIDJll7Ewd3w6g9\r\nvxAz0uhYyhqTXwOkbKXw4cdD7mCwMrIS0g5lLxCclobR36HDemGIkBns1glR\r\nqPrWip34j+lvqDC3MklPc3+mcfFPC06L9JmC+eSUFOc4wZimKwR9PHmFX8Us\r\nnynoWniqMeWgLavunrWOO6Ovm5dkXb5zeSQdAEBW5edWWlDWPbaeLEfTth1l\r\njOj583obK//ituLArlZCc+0m3na/5vcyiPCNs1BgZX6wlQleo+s7pYdgte5g\r\n7BNj5Xhk9K2L0nunLPT/tGpnfF+sfQMS4wQVajtt3PaAXtT0HzeZn1udSAzI\r\nsHJLbNO/zRPgRJ8xGXSU/nKFSBqwtYHC+tWyIB6FgxCP5BxXVupgqAyUSacx\r\njoesEu1dpWycIWzbe0iq+X7chqERBPD6cX+Glnuhp55zRpXrJnkI6PvFk0CT\r\nb6xvgNd9FvxSgcWlTqJ5qG9H7yZ1gi6zspAG9xEGzpD8BuDkgUkbhpvmd1Yo\r\ntUG96KDwFo7sx4P8Fbf/oxWaV+wETdYzr6E=\r\n=ZbpW\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.1.3_1677144116066_0.6464374990899724"},"_hasShrinkwrap":false},"1.1.4":{"name":"gesti","version":"1.1.4","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/types/index.d.ts","scripts":{"build":"rollup --config","dev":"webpack-dev-server --mode development"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/types/index.d.ts"}},"keywords":["贴纸","图片贴图","图片旋转","图片","贴图","图片拖拽缩放","轻型","微信小程序贴纸编辑"],"author":"","license":"ISC","dependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-commonjs":"^24.0.1","@rollup/plugin-node-resolve":"^15.0.1","@rollup/plugin-typescript":"^11.0.0","clean-webpack-plugin":"^4.0.0","html-webpack-plugin":"^5.5.0","rollup":"^3.17.1","ts-loader":"^9.4.2","typescript":"^4.9.5","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.11.1"},"gitHead":"17b743020a3e0929f2441af56eeb4686a0c3c431","_id":"gesti@1.1.4","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-/lzkmJW7PUH2JhdCHDtF2QADIRzkAxbSgNEzW3ru/+oC3/NFj75JH6MDn3xUBaUmk22SS+1V0wsG3dnKsLPHyw==","shasum":"965d794fc47c731e2212d16f0da1630dba03d86c","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.1.4.tgz","fileCount":38,"unpackedSize":118445,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG+rJckwTuPT8ghabGLxaE4JMh1Bw0jYWO6hhVhDRqKPAiBVj4xEWmcBmL1JpRmXkMmttBdW/IM3qxURLSX+ZnDIgg=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj+DpaACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmpj4xAAlkVLOwHuQG3DMh5D5XPPz9zkVsqgnohugPLI7uVqAaR84lf2\r\nkLPtiqT8XqKsUPIwZPajaPIsECY3w2UO2NrT7Dmn0j/FcUtsYpeOly3iF7n7\r\nb32TtzmM+hcsv9p6OrsZwfqgnz5ZnyIdqnFcLj3+KwOANqebUMk49Jzz51SG\r\nU//jST/kXGjA6wBGV8kFC240h+xDjvB3vDnQwIOGm6ztNIDuIXqFMpYZQIoZ\r\nZ7mCyNwI0peIuSpiaSmsfUyzIOsJUFG0F1xRF/AO6yPaarw1GVy6Yo+kDvOK\r\nXevzpfgOTG+AwHS2wzqcyW8sxRjkiU9481+oaSmTS55deuTORsN4jrw3PYZC\r\ns9SvGdpxhQAt35DoJVyfXtDoBHQEFp0cfSFKwlBgJHLZcW1zgBGSZB8S1CwF\r\nF2olCWf6rFtfX7NOoHtInIEoLzlkanyq6E8Rm2SPaax9IaPCE4T5DQRkxvPB\r\nuOIGxG5h+X3k+sPqz9HQbD52QZqQ5jR0nyOKR2dMZmDFdwmyPQYTMpTwfO/k\r\nu02bUqGdzRjRyVE1tiwThiSVkVDUuOK16Lz8kaDjRAREN/GNps40HdyEUCWu\r\nuilfneSbPnHfAHc0QTD1mXZKSaQ6Ko3/8Idx2KQKAXPEgV0dJSyTYK9FpK5F\r\nZAOAQfe75QoK/vm81+d+BJP2voExXPFzq/s=\r\n=iKyu\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.1.4_1677212250575_0.2083771560854346"},"_hasShrinkwrap":false},"1.1.6":{"name":"gesti","version":"1.1.6","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/types/index.d.ts","scripts":{"build":"rollup --config","dev":"webpack-dev-server --mode development"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/types/index.d.ts"}},"keywords":["贴纸","图片贴图","图片旋转","图片","贴图","图片拖拽缩放","轻型","微信小程序贴纸编辑"],"author":"","license":"ISC","dependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-commonjs":"^24.0.1","@rollup/plugin-node-resolve":"^15.0.1","@rollup/plugin-typescript":"^11.0.0","clean-webpack-plugin":"^4.0.0","html-webpack-plugin":"^5.5.0","rollup":"^3.17.1","ts-loader":"^9.4.2","typescript":"^4.9.5","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.11.1"},"gitHead":"00f0f5888f985533c0c7fef255ff53ca7ca5b806","_id":"gesti@1.1.6","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-6fAVUbp3LRIavYyP7ZzMimjjLo7Ed3VBU3jFR+x3fnScvpsoQp5SkFc1n0NFD9eSc7RJ7Ii9/veiJWotZ326yA==","shasum":"b2d3cf0e0a4d82f2494371683abdd67cf4860a65","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.1.6.tgz","fileCount":38,"unpackedSize":134194,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHKXOD8ZD2Js+nI7526XAnEeBKa8E7c43WSGBs5csNFFAiA9XYWQq0LdgjRjzUNKV1oVSPGfs2sWWNvhgXKRuy9/fw=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj/A4HACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpdFw//WGw4A1MmWm5AiTTWSL5HIeCOCI8pbRSW/AwZS0A3J327spxp\r\ndDHCuSorILuaTX3G1esuG1lWpgtA7K2A3IeNEbZnFGCgYRoS3muuCsw3fOK4\r\nAdargxKbJLc7URfYxNp5j6DTYdD9UJlYeRN+qb8nmQYt/Qr8+gFr8KnZUGQY\r\nYq6ZjuiZMivA4ArK/gNBKseuGq2eBfWIsOQqyc3MtFo2sHwZJlsFzh1OPcma\r\nOdisZovFEYQPF8JgVyL7GcEsIA8GCJneJyG3VyE8ocbkX/ckt5eDbGlswdLU\r\nBwZcVhOUUG3HujB986DeBlEcuhTWlzPaLS49loaNpq960TsO7W5/yZIAoxKm\r\n6h1XKZMyzV0/sTPJ7CW9+T95OtmykqcSW7w+HiDBWlkZ2dP6DYhusGHsUlnw\r\nHhvcDqD3dmgzJHZrKR4PEYzoS3ARu6BP4GXXZ29jM2uGQX9HV/oPn182fqyB\r\nMypiCVMglFwZUxREagYwMQD9ALSP2wwHnGU86AvBQDsDUQ1ESqcGqO1mWcnJ\r\n+bu4F+U/E60lIKJAViE5gxXcG0kWKSyCiOp8zH55QI0yFpvvrZVfMHY7jeSp\r\nHQshTQL61JGkY6ggXDqAI9LQRFT02GoVHQ5IsZ2N3ehV5er5Ge5cTVbvnJbq\r\nI0hswIITsEGPhW59z18oBnnCvhH/UElJwXQ=\r\n=o3g4\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.1.6_1677463046772_0.2196344278844673"},"_hasShrinkwrap":false},"1.1.7":{"name":"gesti","version":"1.1.7","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/types/index.d.ts","scripts":{"build":"rollup --config","dev":"webpack-dev-server --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/types/index.d.ts"}},"keywords":["贴纸","图片贴图","图片旋转","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑"],"author":"","license":"ISC","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-typescript":"^11.0.0","clean-webpack-plugin":"^4.0.0","html-webpack-plugin":"^5.5.0","rollup":"^3.17.3","ts-loader":"^9.4.2","typescript":"^4.9.5","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.11.1"},"gitHead":"c7b4d176802e506ad2a778a0961fbc9126f7c1bf","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_id":"gesti@1.1.7","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-4pmK7/M5AAex6+Ypil6ZD/UZabsmSV/Uw7CcPJgtt3Tgmsm6s9VOQV5tk+4ZamNfNyy5hSh4C20XT5SyQ6iU+g==","shasum":"ba34f971d8725a8cb2e432adfef1d837f2871c82","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.1.7.tgz","fileCount":38,"unpackedSize":134208,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCkqpP7zUkBKfEBlsVszPXM3+9UKajukC63+ZukP0gU3AIgLRiyOd7Bkv/0eUEo1oTkYzuemct+lKUzVZ7+VR3DeaU="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj/FLeACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr6ABAAhqnw0i/W7AdC6W3Z0q3aBA0RI4tw39Vf0Hu34r17LER8IQrB\r\n3wc2hwLhSBIBywcwjG6KCicIEusQT3iS7S7U670L0j1Is9SJrlx5+qrVecfM\r\n+EWxOaQUaV2gjqU/r+gPpCYYHvit3LUb3udRUjS5sHa2j6YfYfN6PC7U+p89\r\nWRTepF8ZiiXlg9I3PUP/VLtBypELRxtC4XziMiGvdXeTKJr4Hcx04wTZCUS3\r\n+a2aYOxWof8pXLjHR+XFsQangKCP5fxUXG+j/uUqrTF+52Rq2jsvUKSAtXbX\r\nL5y8k1Rrd1TbIviCu89BEAQNRQY521HyInIEpbl1LQuQ+R8CzqJLPigmJS/s\r\nzU/RNB+fIL2L+Nypv36P4I5C4O23tEfVMKYpDOPfAn5nKI1d3KJowE+WiLA9\r\nOmKrtbwOgGwTBObR5sNq7iIg89pihoAquVx2IdjEYI7Js+N4bWGFMpW9J4rd\r\nd/OJNk0igzHXGjVVAxiaCqPlJF+V64/Z8xzmUNogEYBb6UCn9swspLr8lOP6\r\nVbSxuRL+VBMb2dbpK1p+uDj0KEa9TDPeQx6p1QHYeSZNYzdgYUHC1wcSHSvC\r\n+UMGw1dDXZb8APGShnYouMmbNcKMPLVhG6YdCXIlmmLTFo9nopuxCSO+1FBU\r\n6zYrKpeRoNXCEHUVIk/JuGUQgXVNaBKQ9ic=\r\n=h+Sc\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.1.7_1677480670710_0.5121827527097211"},"_hasShrinkwrap":false},"1.1.8":{"name":"gesti","version":"1.1.8","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/types/index.d.ts","scripts":{"build":"rollup --config","dev":"webpack-dev-server --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/types/index.d.ts"}},"keywords":["贴纸","图片贴图","图片旋转","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑"],"author":"","license":"ISC","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-typescript":"^11.0.0","clean-webpack-plugin":"^4.0.0","html-webpack-plugin":"^5.5.0","rollup":"^3.17.3","ts-loader":"^9.4.2","typescript":"^4.9.5","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.11.1"},"gitHead":"fe6eb8cfc6c5e440687709029fd042cfec31580f","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_id":"gesti@1.1.8","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-mR22q9kMeNj/PkCB6F0FIXrz9zbBo3lvRS78zIBaE9DX36JuhvzDbyV+4eeYtZNbztOKF14/meZUygyw+Wc1gw==","shasum":"c81b64901b8e26e6765fcb3e0ef4d5e2d1802b32","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.1.8.tgz","fileCount":54,"unpackedSize":173111,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC8+ZXih0tnbhSUwduRCaFHTd9yQ42tzzeo9+kWOoq6tAIgdQzpZn0RCQClZvozxPC//7vfHVCtRPFi9BaXgRNy/rw="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj/xu1ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmphPw//Ysr76yDRT0o7THGecmT/sGV5ApHVxLDWNGqWTUcvpNqAU9vH\r\niGxIWTysfKMNIB/LG0LmS4w7Nr4TaJrRDo5wiMrrafMKccArFXiB9jc7fHS4\r\nky53jZcH+E+RZyG9yZscC8Z3HQODSH0EzoexxuvgtcCUQDryj5RtUE/quiB0\r\nlfzF/XQbGrbJIrU18azrEtjHK/lDncXX3KzAshvugO6w8hDAtdMpuJzOEc1t\r\nCjpTo6FdDwtXZOQIw7Tqc/Y/8+AX2MZ/aQ/NoF+/G8y356YZOI90OCrRsbsm\r\ncFX5bt4UHnCOZnl3z48LXkjoOqib2wDLHUhazEYOIASu4ZidcdNZMhuDSZbd\r\nwiLAozmzP9k71fh9BUQCd5S7OLvqOxPqBpLT0NRw+/yg5yOPO0q00DUxSqXQ\r\nfiU64iDWej8PGWgpRQKezgkrHBur7THMxXVLV32ibDy9zxfB29fh5n8etlKE\r\nzAaJqDVf5BdD8gwmPn8rZjjFqIM+YQHV+ts4Zp0PqTJXt8IH29YTgGB4vy++\r\nETYnMXMJXHWnJQP/7o4d+iuEDA3HgOuGxxYzSDJgPG53SqO/SzRLIRnA3Mhg\r\nnXvpLcgUeTZ16uybehQPW1kN/4FFeHKzNthyj63O4LXtT7eeNcT2Q52HezM/\r\nk/0b6g2tDmO6qLnMBxkmZZIdEncGbKXbf4k=\r\n=4GaW\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.1.8_1677663157595_0.8923815460730404"},"_hasShrinkwrap":false},"1.1.9":{"name":"gesti","version":"1.1.9","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/types/index.d.ts","scripts":{"build":"rollup --config","dev":"webpack-dev-server --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/types/index.d.ts"}},"keywords":["贴纸","图片贴图","图片旋转","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑"],"author":"","license":"ISC","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-typescript":"^11.0.0","clean-webpack-plugin":"^4.0.0","html-webpack-plugin":"^5.5.0","rollup":"^3.17.3","ts-loader":"^9.4.2","typescript":"^4.9.5","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.11.1"},"gitHead":"a3a8722cbcda12835452226805741e00689df565","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_id":"gesti@1.1.9","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-+/hJVhtjfXoe3V+irANUOvd4No9rwImuqdgXqdQ7ZPKoB8h84aanvmov234WYcjV3LRBPp/MkwI1xCNiQotZ8w==","shasum":"5c8d51e8485f519a5837e6194b4d3b14083f94b7","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.1.9.tgz","fileCount":70,"unpackedSize":237186,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDWus9Iu2Pv1yQfitocNbGPp7EHF4WhprP0gfhAcdpa4wIgH1v2feF87dY34KrF8MqhgWMXmG+7JWA0f9jrWHCQ05o="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkIo2iACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrvhxAAn6/Sbs35ZcBZ+82aAb67A603oRrtqiEY/tc/J4kHFGyNaY9s\r\nJa6mL7USL8uAfLAO8yzp3WGwpJ8pMuUfDIpr5K3uQlngBhSuQ9ehNRmU2COO\r\ng37RGqtGyR8ddq94mA0+BHn1Erfx3VISREM/RTOsaEuqO08CeoR5XBXXklRj\r\nyeyMdcSrhPll6NVKOLFSMZ2o2C95EXoTYcBNlbPvGGdLfIYiys0GmwhKfRHr\r\nwMp6165oi08QAz/yDxjHTtDEQnfPkfea4CvqIRvie4z4V28ik5dpDzH1QyhX\r\nX15OqLKLrwkYDPgEaNuA8twGPPEWpDof7ksh3hSbkS5ABdSSFNcpIYTPiylk\r\nHqLsivkPst7sEf5HXKFeXcvmNYHIybKZlhzDSZYZknwVg5hbe0RYggAg2b26\r\nr+gcPFdZp42L4CSKY9FYfIJDI0zOldcod3yKSTVJN/P/QdUp4tGkfC48GODG\r\nhjVG0Y6TcnnIhg7d83qi/kxQwCLpnVRYYhEyuZljlB0wyNumrZVmUgvAB3Tk\r\nucuwsyAtbB2MH38vhZBWB8LDyvS+b8wWhgBEqbbxELOp+/s0fafp5W0GtznN\r\niir1CxVq8zGMoatDrozDKn0iH4cHfsExqDg7Ha+EeVrLPkrjAjaYOIRbBLsd\r\n3tx9S44BJhw9JnJqPQ1Lt0W8zN7HGsXco90=\r\n=SAy2\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.1.9_1679986082727_0.5776841892961266"},"_hasShrinkwrap":false},"1.1.10":{"name":"gesti","version":"1.1.10","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/types/index.d.ts","scripts":{"build":"rollup --config","dev":"webpack-dev-server --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/types/index.d.ts"}},"keywords":["贴纸","图片贴图","图片旋转","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑"],"author":"","license":"ISC","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-typescript":"^11.0.0","clean-webpack-plugin":"^4.0.0","html-webpack-plugin":"^5.5.0","rollup":"^3.17.3","ts-loader":"^9.4.2","typescript":"^4.9.5","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.11.1"},"gitHead":"2065e67d23800bff77e96dfc6f0c031a66452d76","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_id":"gesti@1.1.10","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-DoREvYQ6mRUd8MFH+K7B6xq38wnj8StdhxAZ+B3eXQDWZDlR0amg1S4g/6TsZy+ZGGQFu0QmSY5Tw9pwUcSIgA==","shasum":"aadb3dadfa6978161e3d7d7cfd7cbf18d3bb5f6f","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.1.10.tgz","fileCount":2,"unpackedSize":7372,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE4ljYJhUgZSntVgNOcK+taXZFfq0kOxZSc0pUg40FQrAiB0D1Gwjenido2JlK0Q6BWf1oBvCBeoBOK2221KYjDiYA=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkMOS2ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqkHRAAg5btTAYRJbXWDC9yM6D7xPgJ7rh5N24hzrcuYo7hV9bLvetq\r\n18naqPPEqFKe0xFPEj9GWN9ajbvprKuDPvSrcPUYsycD+ZIfMhyC0Egow+0o\r\n1rvOXf5g9j/xHvRJ9czq1NekrKjmy0wRLnXH+Jz8BtYkj5/QpuDELeDeRMRc\r\nTn1I0el5u7rij54fzBFCj1A214S3wy3f8mFmrjR41jRFsIvjrSYuLllxDd3N\r\nLG6tJC2XHaENbsi7H+fC5gXKn039qXApHF/t22TGA8thAdkEVJMnMzRAJbPJ\r\nSLs0XXo8Qdx9eVcHaW6aj4l834snG6gL5Wi4LYdlsR5ySF1bclje+dCSzhA8\r\na/Ij5Jf0wk1YkrvXDbEmwCCnXMXi/bP7MqeXR6tbpsf+tpOvnYSwhFWj5WSt\r\niBLClVAcW2dDXS/2QknnbAKDsw/ybBP+weQZ2Q4wK644XVAaySfW5iCzDW/d\r\nFs18sTV/yPDV9zHaa72i2f8B6xLGVEu6fRPMlPoCf7rPtIpFtz0q53u55QY1\r\nV8fUzSzW1qBut8VY8HzPNfzV8J/bdGng/7f9Ur3Kt4CY1jJiYJHfw/yWhVcE\r\n1IoaEBto0DQvgqi5HAZSoyYn2j/TEacRjfNCtP2YbkYxpTHMSFy3028Vk2fH\r\nLGlbmTqhHkeKDZfAazoQNw+fTxZzUltU/PM=\r\n=tTeP\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.1.10_1680925878385_0.12286363846345738"},"_hasShrinkwrap":false},"1.1.11":{"name":"gesti","version":"1.1.11","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/types/index.d.ts","scripts":{"build":"rollup --config","dev":"webpack-dev-server --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/types/index.d.ts"}},"keywords":["贴纸","图片贴图","图片旋转","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑"],"author":"","license":"ISC","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-typescript":"^11.0.0","clean-webpack-plugin":"^4.0.0","html-webpack-plugin":"^5.5.0","rollup":"^3.17.3","ts-loader":"^9.4.2","typescript":"^4.9.5","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.11.1"},"gitHead":"8537f5e9ef0ad312a540cda8d9ca149bb8c094b3","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_id":"gesti@1.1.11","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-KjLYKiqKz60hzAIoqGNqNX7UqbQhFC/38DzZKaSlJaG7OI8yVdQr/tPl6ax+yhYMrJmOURK6SZIMck4bKHHahw==","shasum":"de0dd71fe267882494e792db99128d445c4604cb","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.1.11.tgz","fileCount":72,"unpackedSize":252610,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEY0Ujs7m/GTqZq/06E0epntdQGUjCcq4o3wW0zi3vDRAiEA+md4jGzRj3mcj6gjGXQiI2D3vpy9OO1oFhne7x8d8R0="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkMOT7ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoLuw/5ARL8cJCAZS7hGAiW5zpG3/JLEMofEzZPqPZZEuL1rLmhYEvw\r\nNNV8mwy40828Ml7ycP4borlz5YLyRY+Ktcasqe7QuET3qYAetrRJZiwiLhhC\r\ncmGLTHr5yi9lP/vDUulzsBwQfWuh+RZde1Ley+WiGw2mQe3rPq6Bx3qbtFpC\r\n6jfgaHyneXohYQJVktu2Af5P9Ddiqw6EMvrpg8s0RMbOqR+we9GR/1u1Pn5n\r\n6rKTi3eAe3yWfa7WLrjPPsGJ1TrBsdNtlHqv5LYwffjOzgd7BSUrBVmOsx8W\r\nMegFWv3aCQzMEb0cncMcRgAzXn8QXIXnMt5/+hjUP79Nt3xEKrN0KRXw7vwB\r\nQ71QOwwtz2sG+44f6B6PCqGDDPHI+eIu+DAqGtvkyNIFQl33RyDMhuMSQ14U\r\nNlirARsUwNqV+IDVYMHsjtIUJt52p8OVimLH1MAbRCzKpXNhQdhkx0FZ7Ht0\r\nw5sttaZB2Irp4M4IlYJMa+oL1dOLqVvHfj40O196IHPy/uj158WExDGIm0LQ\r\n2GiMGHy8hLVh1sRr4WQ9h9U0JRBdjvjtM+tZ7cpzOA/nfUIwbd2LScB8E6Uh\r\nrT4zc5hs45LF42FNlXA5lQMVFnhWRFJMlkZYVQ4/CVYnAwgeSLgGzMa2cNbq\r\nN8C4WSU8W9Qqgw0uO3T1YViF7MRpRTWudHs=\r\n=P7/o\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.1.11_1680925947245_0.13888994136783372"},"_hasShrinkwrap":false},"1.1.12":{"name":"gesti","version":"1.1.12","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/types/index.d.ts","scripts":{"build":"rollup --config","dev":"webpack-dev-server --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/types/index.d.ts"}},"keywords":["贴纸","图片贴图","图片旋转","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑"],"author":"","license":"ISC","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-typescript":"^11.0.0","clean-webpack-plugin":"^4.0.0","html-webpack-plugin":"^5.5.0","rollup":"^3.17.3","ts-loader":"^9.4.2","typescript":"^4.9.5","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.11.1"},"gitHead":"cbea193fbd60a123eee2a02cf6dc1c40f18780fe","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_id":"gesti@1.1.12","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-zKPPcR+ZZVdJiZyBPNuk890YkCsiwMQgxhcOU8Mxhe9iaUIyNqo38GsaW4F911r0Z5/NmoeN1JpzmXrYZm0UHQ==","shasum":"f8f659da5f18cfff85b7a9987a7ad0a23e6fd566","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.1.12.tgz","fileCount":70,"unpackedSize":257749,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAHkC12ErlZ5cqO+l6EMRmgK3pwF4Y6EVN+bszhAacARAiEA1XSMuNUpy+zI7pOgDGj/CUX0TmsUqdmmrnFfPhkarjE="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkMTDTACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmquzw/+Ju/oQ4i+a50NKdzNxSkdRN6wKSk8yyY713UBYT3AnBms9Y8u\r\nJOJjCVtUhcnsZDDwBR+HyfPcLGr5gzr61NnQZrhP/+5A3evC8Mjbh2lCcGzx\r\nDmCm4dpN4G1fqvBCFuW+MUjUMIWZ2Zan9NaVWgbHoYWgmX7NTGG7vozG4PGL\r\n8RbOZOOUFaIXc4IT9a4vhJpnk7knpJXhcx8uDMtkQMENJNEIXibB9de91syF\r\nlNkYbGSTk8DRyFxAR4ftChXcSSGNECNgDOMCXrjXHed1k6EBwaA2JH1FnKSc\r\nEx2M44XgyW9Jp/6zjKb0gcbMrw7YlcP4GbSxdrpOYBikE8tGFaHJAADlPoB+\r\npMWjuB/gsyhpGnqO+LYck/8pxKyLDHSQn0PlQBoNZPUd7OB7DRUeHbjts4yT\r\nc/ep2O/BLyoZY4XMlyIWgFQZHRyQktTlZGTepw4bsflNElY6UnKJfxyIfvKL\r\n+huhZxZzFgAvICbuvDU7v3uJ4lllFRo/Q2rX4kKk+kF4rEPY/WmrSwYmG+a5\r\n/gTX4ovX3uP3wBMN/EGq3+gWqxmv79OdRCm8ECOpxb3f05hJwWrihm3aWB6/\r\nctDde+lLD+5hHPxsLjn/JWAxbU/8i1ZOqvJudsr+6uYunURr4eKLoAqrQLLk\r\nGVZ9xr/KvwezUuqEYCrGC7t9K/iyO6e19BI=\r\n=j0d9\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.1.12_1680945363744_0.3597636986821411"},"_hasShrinkwrap":false},"1.2.0":{"name":"gesti","version":"1.2.0","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/index.d.ts","scripts":{"build":"rollup --config","dev":"webpack-dev-server --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/index.d.ts"}},"keywords":["贴纸","图片贴图","图片旋转","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑"],"author":"","license":"ISC","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-typescript":"^11.0.0","clean-webpack-plugin":"^4.0.0","html-webpack-plugin":"^5.5.0","rollup":"^3.17.3","ts-loader":"^9.4.2","typescript":"^4.9.5","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.11.1"},"gitHead":"bee4706922d86f3080bced2f98402f37c057b3e3","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_id":"gesti@1.2.0","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-N3M+R454GrZzCejReC2yuMWnu8xuc8DAR9zSLS2O7i1XmmcJpATGhp0JtnEgAGS4wZ7+ngZFQzt/QiVTx1Sczw==","shasum":"ba440687d1c61f61efb70018909232b6d42536e5","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.2.0.tgz","fileCount":5,"unpackedSize":301920,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD8TtO2GcnC8cyGvsyFpmpGH8kP6f1EFckIe545dldpTgIgKc45/g8RFecQMdAHYBP9JWQO/sDcCEwvADafQOKLHso="}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.2.0_1683603093920_0.7534905314438516"},"_hasShrinkwrap":false},"1.2.1":{"name":"gesti","version":"1.2.1","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/index.d.ts","scripts":{"build":"rollup --config","dev":"webpack-dev-server --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/index.d.ts"}},"keywords":["贴纸","图片贴图","图片旋转","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑"],"author":"","license":"ISC","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-typescript":"^11.0.0","clean-webpack-plugin":"^4.0.0","html-webpack-plugin":"^5.5.0","rollup":"^3.17.3","ts-loader":"^9.4.2","typescript":"^4.9.5","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.11.1"},"gitHead":"53a47228f4f69ece6ab30fe116e0bb3417da6248","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_id":"gesti@1.2.1","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-pwIRe5Q2l/L5dvQBII0OACW5d8CUhE/cUXtHFEP9uKPpsyGscle9kSM1aYexYYYVDqekpawTM0uKCfBBDhS0tw==","shasum":"76ff86a7e16c0d2886b33bb6e37eb2c52702ade3","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.2.1.tgz","fileCount":5,"unpackedSize":302106,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCHYfmANI7AvIdfJshrNLxeRrUYLeph1Qrcij4c0kvgOwIhAPFMeQFxnG8TkII1DRNXfVlkD+LQSFxj2pN1agiLIpsg"}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.2.1_1683613370579_0.8324494482958009"},"_hasShrinkwrap":false},"1.2.11":{"name":"gesti","version":"1.2.11","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/index.d.ts","scripts":{"build":"rollup --config","dev":"webpack-dev-server --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/index.d.ts"}},"keywords":["贴纸","图片贴图","图片旋转","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑"],"author":"","license":"ISC","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-typescript":"^11.0.0","clean-webpack-plugin":"^4.0.0","html-webpack-plugin":"^5.5.0","rollup":"^3.17.3","ts-loader":"^9.4.2","typescript":"^4.9.5","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.11.1"},"gitHead":"c89352df97f337a37bcd8691b6f8bbafedcc2d80","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_id":"gesti@1.2.11","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-Y5WxZ7qVUsNk6kwgJSqKdMv2jQrHDYlaCferQHHoAAMnDcRK14w1ntuMYcmsbyveNr7WT8hum8awEWCuaEvTtg==","shasum":"74fade55ee7f36dd3e81a92e64581b15331bd361","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.2.11.tgz","fileCount":5,"unpackedSize":302592,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCxspuKbOZU/0FqfKi7Oz0c2iqMwXBp77LMWVCIzVoWxwIhANoRkVEY4hAvhQs22r4L2wPkZHL4aJdHGKQvdyhxZF/f"}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.2.11_1683615341579_0.5603044386570697"},"_hasShrinkwrap":false},"1.2.12":{"name":"gesti","version":"1.2.12","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/index.d.ts","scripts":{"build":"rollup --config","dev":"webpack-dev-server --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/index.d.ts"}},"keywords":["贴纸","图片贴图","图片旋转","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑"],"author":"","license":"ISC","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-typescript":"^11.0.0","clean-webpack-plugin":"^4.0.0","html-webpack-plugin":"^5.5.0","rollup":"^3.17.3","ts-loader":"^9.4.2","typescript":"^4.9.5","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.11.1"},"gitHead":"c9829fee41e151677a1bb405d639766532547bdb","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_id":"gesti@1.2.12","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-59EJC6qgB1JTuCfkTiLCTq+Drl9CdB3FQoZTTlwxbAzdN2vE7L7eikh5yUOLVT3wVoSuimkBwDiXTiabPCcILQ==","shasum":"ba12225dbd3b12752908ec88cca154c522692d57","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.2.12.tgz","fileCount":5,"unpackedSize":299504,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDBUBiqN9TFhaLDknS3KnPqlk8ySuftLTtZMt6yKy4X4AIhAJrmiK9avxHl3w3LKlB6Z7eBHmxsMmtkxLFvG0rzHFbf"}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.2.12_1683686255534_0.49462717194743355"},"_hasShrinkwrap":false},"1.2.13":{"name":"gesti","version":"1.2.13","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/index.d.ts","scripts":{"build":"rollup --config","dev":"webpack-dev-server --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/index.d.ts"}},"keywords":["贴纸","图片贴图","图片旋转","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑"],"author":"","license":"ISC","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-typescript":"^11.0.0","clean-webpack-plugin":"^4.0.0","html-webpack-plugin":"^5.5.0","rollup":"^3.17.3","ts-loader":"^9.4.2","typescript":"^4.9.5","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.11.1"},"gitHead":"c9829fee41e151677a1bb405d639766532547bdb","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_id":"gesti@1.2.13","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-8yLJuapx5qWBA4MvVs9DKJnY9AAMTdcrFxmZmEaMy9LtHf7Baq+3K0cw/9gMlUQ0af/l7BGWpOxEhPyG9qHi0Q==","shasum":"a8fb11892b41314db599053d5d403bd1aa7fc10c","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.2.13.tgz","fileCount":5,"unpackedSize":310814,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEAZjeIx9H8Quw0KeSVf3DFYprUH3l8o+LAT2slYeWwyAiAbm/AvwZHJMPR0C95S50jVlb7OTg8/Fdtn2TaDFY58Gw=="}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.2.13_1683687245896_0.13906565067607257"},"_hasShrinkwrap":false},"1.2.14":{"name":"gesti","version":"1.2.14","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/index.d.ts","scripts":{"build":"rollup --config","dev":"webpack-dev-server --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/index.d.ts"}},"keywords":["贴纸","图片贴图","图片旋转","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑"],"author":"","license":"ISC","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-typescript":"^11.0.0","clean-webpack-plugin":"^4.0.0","html-webpack-plugin":"^5.5.0","rollup":"^3.17.3","ts-loader":"^9.4.2","typescript":"^4.9.5","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.11.1"},"gitHead":"a3050fe19df7337219052c3658cf0ed4ecf97145","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_id":"gesti@1.2.14","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-iB994mqstdgInNFXQ277hMWNlV1w34izmO9l9CCjRdSGhnnF7p/d6u9gPberCJHNOMNpStd1QPP26iukWy0GiA==","shasum":"b3b15781ae5420d04073d0ee89b7f2edd024bd2f","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.2.14.tgz","fileCount":5,"unpackedSize":316839,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFWB9t2FMHlduhv9FuX2VQ/4bwnmVwv5BlEaA1YBRGQhAiEA9wl1L0GXBQP74iiJQWyh+ja92/OMT+nW3MnhiLST5ZM="}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.2.14_1683773603173_0.8270340271200429"},"_hasShrinkwrap":false},"1.2.15":{"name":"gesti","version":"1.2.15","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/index.d.ts","scripts":{"build":"rollup --config","dev":"webpack-dev-server --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/index.d.ts"}},"keywords":["贴纸","图片贴图","图片旋转","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑"],"author":"","license":"ISC","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-typescript":"^11.0.0","clean-webpack-plugin":"^4.0.0","html-webpack-plugin":"^5.5.0","rollup":"^3.17.3","ts-loader":"^9.4.2","typescript":"^4.9.5","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.11.1"},"gitHead":"4d693ab922dccfc7821dc7365bcb48d25dd84020","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_id":"gesti@1.2.15","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-K/5KeKUuQ/pEE1Pf+qTnzIyy90c2ekFV4YK8csTi8Yj13DDy/b8NL+Z3e93Owj5ob/2SRNtNEUwHLB9UY5+Q5w==","shasum":"11e5dff99d0ee50d8e5eabb39b762c0537cf6fbb","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.2.15.tgz","fileCount":5,"unpackedSize":353104,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH2b/30edtaX3MzA8jaMJGiYUCU2cGFa2h4NbvFNTx4aAiAj+k4pZSwXIP1b0fYN4c9wKPhP3ZZKY8PpBO8/Yok90g=="}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.2.15_1684139369808_0.4232837236043505"},"_hasShrinkwrap":false},"1.3.0":{"name":"gesti","version":"1.3.0","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/index.d.ts","scripts":{"build":"rollup --config","dev":"webpack-dev-server --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/index.d.ts"}},"keywords":["图片贴图","图文编辑","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑","Hooks"],"author":"","license":"ISC","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-typescript":"^11.0.0","clean-webpack-plugin":"^4.0.0","html-webpack-plugin":"^5.5.0","rollup":"^3.17.3","ts-loader":"^9.4.2","typescript":"^4.9.5","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.11.1"},"gitHead":"cc9f1e31d2b8a7217b103d46364c333b1aaa72dd","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_id":"gesti@1.3.0","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-BVw/zSEqeCzsFOuQJyec6Z8wJFRaB3xnpKg8r+BQ/oYSE/A1xJcuQ6nTVHMsOTZFPOiHdr74afmeOwdvFoPA5Q==","shasum":"ac0ce19fddaacb9f3c3e6d44e37fa099f2f3dc5a","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.3.0.tgz","fileCount":5,"unpackedSize":361073,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA4GcP70IZxyciJzvzhTuDCfWHJ5ie0XIyEj3FNSV2wgAiBF3UO479Nre7ApEi3Ug7JfaMV7giJvScMhfxj4Dhhe/A=="}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.3.0_1684202680576_0.049411782224035194"},"_hasShrinkwrap":false},"1.3.1":{"name":"gesti","version":"1.3.1","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/index.d.ts","scripts":{"build":"rollup --config","dev":"webpack-dev-server --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/index.d.ts"}},"keywords":["图片贴图","图文编辑","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑","Hooks"],"author":"","license":"ISC","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-typescript":"^11.0.0","clean-webpack-plugin":"^4.0.0","html-webpack-plugin":"^5.5.0","rollup":"^3.17.3","ts-loader":"^9.4.2","typescript":"^4.9.5","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.11.1"},"gitHead":"cc9f1e31d2b8a7217b103d46364c333b1aaa72dd","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_id":"gesti@1.3.1","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-WOFTdCbNVv0v6W/h/m2UPv5pYDbuC5PkssGz5ebkUS0NA/rwuWlKS+NTB7LJDjRmC4Rmm4kAlCF5RbmRvm8vPQ==","shasum":"ad6b452bdd749b8c9841306133cbd2ca6617e16a","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.3.1.tgz","fileCount":5,"unpackedSize":361153,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDt3/HwPi+xAzpa+aPHS4D6uvV0dVYe7nHkVJD3jiavVQIgaCawKXwE2Pt8GTYPwMaBcJA9fuJ19Bx4h2nWjVKVo6c="}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.3.1_1684219633837_0.6611160732149064"},"_hasShrinkwrap":false},"1.3.11":{"name":"gesti","version":"1.3.11","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/index.d.ts","scripts":{"build":"rollup --config","dev":"webpack-dev-server --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/index.d.ts"}},"keywords":["图片贴图","图文编辑","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑","Hooks"],"author":"","license":"ISC","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-typescript":"^11.0.0","clean-webpack-plugin":"^4.0.0","html-webpack-plugin":"^5.5.0","rollup":"^3.17.3","ts-loader":"^9.4.2","typescript":"^4.9.5","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.11.1"},"gitHead":"cc9f1e31d2b8a7217b103d46364c333b1aaa72dd","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_id":"gesti@1.3.11","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-qKclnqpafZcKgcKk5VCQNzaZccyUpxvNqVgY528aHrRDezvxLs26yfe5JgBs0L7lieG0qRmL2qyCuzg4sGeJog==","shasum":"db9bb000c3fadb886fd3a994f943666278d2b771","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.3.11.tgz","fileCount":5,"unpackedSize":361336,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCmmVEt4sDQYbynuA5wj2TqJ6YGN+6Xwqh4Y69j8pmyWQIhALkjU9Sp9UGv+h02ecI79HOFJNHX6igMwVN7rCpQbH30"}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.3.11_1684221695322_0.44141333865059185"},"_hasShrinkwrap":false},"1.3.12":{"name":"gesti","version":"1.3.12","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/index.d.ts","scripts":{"build":"rollup --config","dev":"webpack-dev-server --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/index.d.ts"}},"keywords":["图片贴图","图文编辑","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑","Hooks"],"author":"","license":"ISC","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-typescript":"^11.0.0","clean-webpack-plugin":"^4.0.0","html-webpack-plugin":"^5.5.0","rollup":"^3.17.3","ts-loader":"^9.4.2","typescript":"^4.9.5","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.11.1"},"gitHead":"cc9f1e31d2b8a7217b103d46364c333b1aaa72dd","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_id":"gesti@1.3.12","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-H5lXmGkObfxqw7K5wUnpXeeu3jOcAFpPLiABb4VwumGM+F70Iu+/AGMPM6Lg5ItuNE2yjIKtf4HvWrfqgiyGNA==","shasum":"98abd2c1983de12ab390ab51f5d4bb4ddef6242e","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.3.12.tgz","fileCount":5,"unpackedSize":362794,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDAgtjEBl4+uzUOToppekA+INWea6JOFjzu+ibm7KswRAiAzJF8ipW5eaTVw9eAsgGvrdutL+BmPhZ2uo5N1Mv+jSA=="}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.3.12_1684222139186_0.08635410767702911"},"_hasShrinkwrap":false},"1.3.13":{"name":"gesti","version":"1.3.13","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/index.d.ts","scripts":{"build":"rollup --config","dev":"webpack-dev-server --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/index.d.ts"}},"keywords":["图片贴图","图文编辑","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑","Hooks"],"author":"","license":"ISC","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-typescript":"^11.0.0","clean-webpack-plugin":"^4.0.0","html-webpack-plugin":"^5.5.0","rollup":"^3.17.3","ts-loader":"^9.4.2","typescript":"^4.9.5","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.11.1"},"gitHead":"cc9f1e31d2b8a7217b103d46364c333b1aaa72dd","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_id":"gesti@1.3.13","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-eqxadXsyd1REQueJE5Et0QfDTX4suwix7VRvI8h783/CTxn2Bkuvn+0ujfkjV9Y1PEZ4zbo22bzELfbyJt8pTQ==","shasum":"618adebeca62b14d8c5d010263d6237a84670b92","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.3.13.tgz","fileCount":4,"unpackedSize":350707,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCNhsgr0IylG2MdwMZihN6o1wFiXrIhWwKwMBHLLHpYrQIhAJIPyhc6HCYjFmTBnljfOMveZKBZMwCgJWmCMwq68mcp"}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.3.13_1684227953511_0.11847998486327715"},"_hasShrinkwrap":false},"1.3.14":{"name":"gesti","version":"1.3.14","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/index.d.ts","scripts":{"build":"rollup --config","dev":"webpack-dev-server --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/index.d.ts"}},"keywords":["图片贴图","图文编辑","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑","Hooks"],"author":"","license":"ISC","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-typescript":"^11.0.0","clean-webpack-plugin":"^4.0.0","html-webpack-plugin":"^5.5.0","rollup":"^3.17.3","ts-loader":"^9.4.2","typescript":"^4.9.5","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.11.1"},"gitHead":"c9049a72ba5bfc3c2b3e379e679bcb1ffd3f93e2","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_id":"gesti@1.3.14","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-CazUPswtrOHfPNnEuqaJ+7s2Aky3YQ9mc9hOwUHt8CFJug8yD4mXP3UvfKszWD7BFYV4SqhXVBl9IslMJ1ylQg==","shasum":"4a8f23aab93c7b7d85e37229ae117f3ab516380e","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.3.14.tgz","fileCount":5,"unpackedSize":367341,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFf1AtnQgwEIb3EEUtGIIjk4UAVvXpW8PbiH1i9Zr/tGAiAF7eaPkDFA2W/w/fD3gv/1q81ZzMO1Z8pwofy5vdU4Ww=="}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.3.14_1684231536077_0.7592971498148482"},"_hasShrinkwrap":false},"1.3.15":{"name":"gesti","version":"1.3.15","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/index.d.ts","scripts":{"build":"rollup --config","dev":"webpack-dev-server --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/index.d.ts"}},"keywords":["图片贴图","图文编辑","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑","Hooks"],"author":"","license":"ISC","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-typescript":"^11.0.0","clean-webpack-plugin":"^4.0.0","html-webpack-plugin":"^5.5.0","rollup":"^3.17.3","ts-loader":"^9.4.2","typescript":"^4.9.5","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.11.1"},"gitHead":"c9049a72ba5bfc3c2b3e379e679bcb1ffd3f93e2","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_id":"gesti@1.3.15","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-TKKuDPsS4XmFRjdojP08KObT2GCcejmuq+kqqq3CdT5had08BjObxcpoOK38E2R+SzDY9jZ0p7ERs57aIMGHXw==","shasum":"c12b217385778e05a6c719adb423f9ef03f7ac03","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.3.15.tgz","fileCount":5,"unpackedSize":368142,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCqxKVaMrd7gBuEGMUQXeVab8SPJNQsvbeZ3iHHI7HZxAIhANqYA2m3e16yZ3sFZ/yAKMrxVEV2wJZ19BZTBpOvj5Qw"}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.3.15_1684232371979_0.19532135503871073"},"_hasShrinkwrap":false},"1.3.16":{"name":"gesti","version":"1.3.16","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/index.d.ts","scripts":{"build":"rollup --config","dev":"webpack-dev-server --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/index.d.ts"}},"keywords":["图片贴图","图文编辑","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑","Hooks"],"author":"","license":"ISC","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-typescript":"^11.0.0","clean-webpack-plugin":"^4.0.0","html-webpack-plugin":"^5.5.0","rollup":"^3.17.3","ts-loader":"^9.4.2","typescript":"^4.9.5","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.11.1"},"gitHead":"c9049a72ba5bfc3c2b3e379e679bcb1ffd3f93e2","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_id":"gesti@1.3.16","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-chmOQi3W26BD0i8OAwzg2qqBz7UCaE3b482TkAHc4lcC39v19Qk/yUWtzxZDh09m983kzSLMAb9yDLdP0ChmDg==","shasum":"821e66c0596e0b3c23e11fbd7b8029cc580bf84b","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.3.16.tgz","fileCount":5,"unpackedSize":368142,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGcYOgY/PYcQ4pfeUGo8W7/n6SnBMyvpt9i7TeT1DawcAiEAiwtvrULZ1cMeTsg0G/dnhCD5gKVwoHM7uhzGkZT8akY="}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.3.16_1684287603032_0.7656307331508041"},"_hasShrinkwrap":false},"1.3.17":{"name":"gesti","version":"1.3.17","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/index.d.ts","scripts":{"build":"rollup --config","dev":"webpack-dev-server --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/index.d.ts"}},"keywords":["图片贴图","图文编辑","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑","Hooks"],"author":"","license":"ISC","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-typescript":"^11.0.0","clean-webpack-plugin":"^4.0.0","html-webpack-plugin":"^5.5.0","rollup":"^3.17.3","ts-loader":"^9.4.2","typescript":"^4.9.5","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.11.1"},"gitHead":"c9049a72ba5bfc3c2b3e379e679bcb1ffd3f93e2","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_id":"gesti@1.3.17","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-t2fTuj+tpVhnVyjVWuvWbdu2KU/5R73CVo3vTlWVjvsbFFJQLmxsZfSNxwnQSDLEX0avy68tjvZUeDJB2ngd5Q==","shasum":"2049c87c1dccdd223c328341cb25704b04e88d1d","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.3.17.tgz","fileCount":5,"unpackedSize":369073,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDb6SppaUYQ/TzqoJ5yogGmqzu16/f6MjksJoCy9ITQbwIgWkat5bQHJd+XjO3mGw4mX8+nxu3ELFHfWtjrUo/6/w8="}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.3.17_1684289461951_0.11799579171088181"},"_hasShrinkwrap":false},"1.3.18":{"name":"gesti","version":"1.3.18","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/index.d.ts","scripts":{"build":"rollup --config","dev":"webpack-dev-server --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/index.d.ts"}},"keywords":["图片贴图","图文编辑","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑","Hooks"],"author":"","license":"ISC","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-typescript":"^11.0.0","clean-webpack-plugin":"^4.0.0","html-webpack-plugin":"^5.5.0","rollup":"^3.17.3","ts-loader":"^9.4.2","typescript":"^4.9.5","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.11.1"},"gitHead":"e3c294fa1e437c14d8b35c0e51fca2c65dbacc61","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_id":"gesti@1.3.18","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-Ghn0voXqKvH3rP1xdPDv54jlHFPlAf8OllOQ8xZ0EkttOovNIDYea1FL8en+EjV/oFPViVC3nV62m6KwYjY4vQ==","shasum":"dd0dbe8a515e38ee8bf118ff98ebbdfdc43a5f59","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.3.18.tgz","fileCount":4,"unpackedSize":362739,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCyvQLr31hXamqcHoI9tSpHXM7scONLpdJlsgbdjRjlrwIgX6EuaAguPQ9zaYKohAdzUBwaUjDQZ/b1u0wPmQOKvqI="}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.3.18_1684316216922_0.24435461129917724"},"_hasShrinkwrap":false},"1.3.20":{"name":"gesti","version":"1.3.20","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/index.d.ts","scripts":{"build":"rollup --config","dev":"webpack-dev-server --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/index.d.ts"}},"keywords":["图片贴图","图文编辑","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑","Hooks"],"author":"","license":"ISC","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-typescript":"^11.0.0","clean-webpack-plugin":"^4.0.0","html-webpack-plugin":"^5.5.0","rollup":"^3.17.3","ts-loader":"^9.4.2","typescript":"^4.9.5","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.11.1"},"gitHead":"e3c294fa1e437c14d8b35c0e51fca2c65dbacc61","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_id":"gesti@1.3.20","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-0hGjNCBSrqI8rYgYmQUzoF90FkgnvmgRptQID68tWOP7dplQobgmLQ0otu+zYzrlHgndS9DVSKnItT/Hyk6eGQ==","shasum":"e2350c7b7f5c8462f1c61fed09bf074acc7d2bde","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.3.20.tgz","fileCount":5,"unpackedSize":376817,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC0UK5Bdig3H3HQS7II263ntluQD7vqd3y1NU/rMPGu/gIgdFhtEBschDfkqOzil3kbCmAIBfF9bKm55SXyGh49ysY="}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.3.20_1684316526200_0.8246108585831913"},"_hasShrinkwrap":false},"1.3.21":{"name":"gesti","version":"1.3.21","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/index.d.ts","scripts":{"build":"rollup --config","dev":"webpack-dev-server --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/index.d.ts"}},"keywords":["图片贴图","图文编辑","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑","Hooks"],"author":"","license":"ISC","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-typescript":"^11.0.0","clean-webpack-plugin":"^4.0.0","html-webpack-plugin":"^5.5.0","rollup":"^3.17.3","ts-loader":"^9.4.2","typescript":"^4.9.5","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.11.1"},"gitHead":"e3c294fa1e437c14d8b35c0e51fca2c65dbacc61","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_id":"gesti@1.3.21","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-h8eon7fmWgVZUHdnde+54n+no6hEeaTkPw7m9nAxPqVfBdQFU+Rd7JW/A3A04NKjAPqEJNgrQpMnrzd7JFAtKg==","shasum":"71c5460f979ab520b3f3c4b6de78eb9d2a73b2b2","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.3.21.tgz","fileCount":5,"unpackedSize":381765,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIADX5GJz4y+r7xTV4zzXU/MSceqknFQfZH5GaP3yuBnvAiEAyqsdDW4AicpZJSUwUNXuC8BO/nxgm4tEUfTAYuq2ysc="}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.3.21_1684392519839_0.9438982171025212"},"_hasShrinkwrap":false},"1.3.22":{"name":"gesti","version":"1.3.22","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/index.d.ts","scripts":{"build":"rollup --config","dev":"webpack-dev-server --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/index.d.ts"}},"keywords":["图片贴图","图文编辑","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑","Hooks"],"author":"","license":"ISC","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-typescript":"^11.0.0","clean-webpack-plugin":"^4.0.0","html-webpack-plugin":"^5.5.0","rollup":"^3.17.3","ts-loader":"^9.4.2","typescript":"^4.9.5","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.11.1"},"gitHead":"b73913af7fb41ee18afe2dcca0988bc60d93d79d","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_id":"gesti@1.3.22","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-wYJzTL3+fX/nQRkKG2ILDSsGllOlALeudxtHiD0yoAjW32jURIxTSNQQknhs0XWZjh4Q4qHtJLPApLl9ylL0rA==","shasum":"fd02b2f4e60152c467bb67e7c65c4f631fef92be","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.3.22.tgz","fileCount":5,"unpackedSize":382619,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIACmmoZDsC58PvP8R8lVyq+KtwlWzBKvu/9P1G3zb7ozAiBZlciFrduzMAQziLVGRtKsENxutNYeGPVpWI6pmxF/cA=="}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.3.22_1684552876349_0.33646179676545085"},"_hasShrinkwrap":false},"1.3.23":{"name":"gesti","version":"1.3.23","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/index.d.ts","scripts":{"build":"rollup --config","dev":"webpack-dev-server --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/index.d.ts"}},"keywords":["图片贴图","图文编辑","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑","Hooks"],"author":{"name":"AK1118"},"license":"ISC","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-terser":"^0.4.3","@rollup/plugin-typescript":"^11.0.0","clean-webpack-plugin":"^4.0.0","html-webpack-plugin":"^5.5.0","rollup":"^3.17.3","rollup-plugin-cleanup":"^3.2.1","ts-loader":"^9.4.2","typescript":"^4.9.5","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.11.1"},"gitHead":"7836a694f52a1eafffcab9433df0978b221f5a9e","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_id":"gesti@1.3.23","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-ALT7iZFPpZ2Yil67Ze71LzmjLZKey8wB8YSzt7bKpcb6LTXmEHmD3RrOXbVbNtO+QpLpd5rFtvjtVnAnu1vpRg==","shasum":"4446d8eb590c4f48d3611ccf6cf540b9517525f7","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.3.23.tgz","fileCount":4,"unpackedSize":154367,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFV2fuyCYicvzxwyZRBQ45eYiAr49y34V2yNG7hynQi6AiEAmlfvdAxrFipSrzBmEG5L9JnFb+lYgZUXdR93z2feDdM="}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.3.23_1691739958097_0.2412811403745947"},"_hasShrinkwrap":false},"1.3.27":{"name":"gesti","version":"1.3.27","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/index.d.ts","scripts":{"build":"rollup --config","dev":"webpack-dev-server --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/index.d.ts"}},"keywords":["图片贴图","图文编辑","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑","Hooks"],"author":{"name":"AK1118"},"license":"ISC","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-terser":"^0.4.3","@rollup/plugin-typescript":"^11.0.0","clean-webpack-plugin":"^4.0.0","html-webpack-plugin":"^5.5.0","rollup":"^3.17.3","rollup-plugin-cleanup":"^3.2.1","ts-loader":"^9.4.2","typescript":"^4.9.5","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.11.1"},"dependencies":{"pako":"^2.1.0"},"gitHead":"576b46e5f123e4fbd39cbe8d1b904252d7f39057","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_id":"gesti@1.3.27","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-Y7UGf7Jig4L7AcZ69cQ3H2sbNW0S17Zg5+U/jmdaWbnQWt1E965whKPX0nd8f0k7eumTykTgRZTGj2DP5tDC2g==","shasum":"1026ef2452fe129d9fa3072e815a4397c7c0096a","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.3.27.tgz","fileCount":122,"unpackedSize":561381,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDfDTOcIdz8fET2lLB4Xx/SPDuSMTl8MhVFVyF3oDAHsQIhAMfQsGPukhUHzxhU5quNxNVpGx4/5PuPF+DvudwglxJM"}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.3.27_1694056433382_0.7090809757983385"},"_hasShrinkwrap":false},"1.3.28":{"name":"gesti","version":"1.3.28","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/index.d.ts","scripts":{"build":"rollup --config","dev":"webpack-dev-server --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/index.d.ts"}},"keywords":["图片贴图","图文编辑","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑","Hooks"],"author":{"name":"AK1118"},"license":"ISC","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-terser":"^0.4.3","@rollup/plugin-typescript":"^11.0.0","clean-webpack-plugin":"^4.0.0","html-webpack-plugin":"^5.5.0","rollup":"^3.17.3","rollup-plugin-cleanup":"^3.2.1","ts-loader":"^9.4.2","typescript":"^4.9.5","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.11.1"},"dependencies":{"pako":"^2.1.0"},"gitHead":"0dfd43ff6ecdf4ec332ff591830de05365cb3149","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_id":"gesti@1.3.28","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-WXK/Nq/THmLkGPHsQMFbe3eQyN3iScnGuIX76YRDxlnQ9JCPcGe0HQDCchOmTma4lydAADq++qUnN2twfQYc8g==","shasum":"d69237d8ac1b9de406f593d8bf9ddf15680df78e","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.3.28.tgz","fileCount":122,"unpackedSize":570317,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDt0NXwX6JzkRoGBwb2F0DgrFsXXBsL4REb8ZvdqWwpbQIgY5OhJNvf13hFhI97QZPHb5Zj3KfbaEVvS20JxSRiYpw="}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.3.28_1695107127780_0.3134127885667024"},"_hasShrinkwrap":false},"1.3.29":{"name":"gesti","version":"1.3.29","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/index.d.ts","scripts":{"build":"rollup --config","dev":"webpack-dev-server --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/index.d.ts"}},"keywords":["图片贴图","图文编辑","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑","Hooks"],"author":{"name":"AK1118"},"license":"ISC","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-terser":"^0.4.3","@rollup/plugin-typescript":"^11.0.0","clean-webpack-plugin":"^4.0.0","html-webpack-plugin":"^5.5.0","rollup":"^3.17.3","rollup-plugin-cleanup":"^3.2.1","ts-loader":"^9.4.2","typescript":"^4.9.5","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.11.1"},"dependencies":{"pako":"^2.1.0"},"gitHead":"153f416d40b272c522c60d709ee40d323313791c","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_id":"gesti@1.3.29","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-mM3bJht8CdkNguBokGOxnevhTRGr0twSpdwGG8J6fd+6NSkbELcIrapVGIHJwUlQ89bMLuiZleXlb8Pn8r/a8Q==","shasum":"d7aa78aee18f36ceb47dbcc635f0d37ca3239f8a","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.3.29.tgz","fileCount":122,"unpackedSize":570717,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDVcRH6jqiD63ITncYcElVH+Sb4KTpWNw2SKoG8Ur5gyAiAZnQBZxYrTFL58RBgCGDJxH1RKPkIl+uijGsNnj/+ViA=="}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.3.29_1695635316130_0.7545796179440643"},"_hasShrinkwrap":false},"1.3.60":{"name":"gesti","version":"1.3.60","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/types/index.d.ts","type":"module","scripts":{"build":"rollup --config rollup.config.js","dev":"webpack-dev-server --config webpack.config.js --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/types/index.d.ts"}},"keywords":["图片贴图","图文编辑","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑","React Sticker","Vue Sticker"],"author":{"name":"AK1118"},"license":"MIT","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-terser":"^0.4.3","@rollup/plugin-typescript":"^11.0.0","@types/webpack":"^5.28.4","clean-webpack-plugin":"^4.0.0","html-webpack-plugin":"^5.5.0","rollup":"^3.17.3","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-copy":"^3.5.0","ts-loader":"^9.4.2","ts-node":"^10.9.1","tsconfig-paths":"^4.2.0","typescript":"^4.9.5","vconsole":"^3.15.1","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.15.1"},"dependencies":{"pako":"^2.1.0"},"_id":"gesti@1.3.60","gitHead":"3a1a0c365a93f353f5ad81aece69442841ab550e","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_nodeVersion":"20.9.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-jorwQBuXfHDZWGbCvUYdG5MDyEHeNqqkiYOKgULQmHEh8Yrw1T4KReX9TyjpRMl71jBzztLOsak7zYrDuxW4SA==","shasum":"ff796dd75937ff6ff0c0b704888184b2b05142f2","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.3.60.tgz","fileCount":8,"unpackedSize":557865,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDmnQ8nqEIfdqdzU1JvaYAXsO8PUvsRI4GvCX5XrBYvbAIgTM02khVz/8PgYIHCJp5twdTMTU/4KMiQc/3U0RWvEDc="}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.3.60_1700559911004_0.6417369143275524"},"_hasShrinkwrap":false},"1.3.61":{"name":"gesti","version":"1.3.61","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/types/index.d.ts","type":"module","scripts":{"build":"rollup --config rollup.config.js","dev":"webpack-dev-server --config webpack.config.js --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/types/index.d.ts"}},"keywords":["图片贴图","图文编辑","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑","React Sticker","Vue Sticker"],"author":{"name":"AK1118"},"license":"MIT","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-terser":"^0.4.3","@rollup/plugin-typescript":"^11.0.0","@types/webpack":"^5.28.4","clean-webpack-plugin":"^4.0.0","html-webpack-plugin":"^5.5.0","rollup":"^3.17.3","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-copy":"^3.5.0","ts-loader":"^9.4.2","ts-node":"^10.9.1","tsconfig-paths":"^4.2.0","typescript":"^4.9.5","vconsole":"^3.15.1","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.15.1"},"dependencies":{"pako":"^2.1.0"},"_id":"gesti@1.3.61","gitHead":"1bba3f70f3621a7fe25d03fed122ec323202ea8e","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_nodeVersion":"20.9.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-JA+LgSCX8Cud3WueBHfobkJtoidnwTbPBb1wLFo2H3EAIug1CFVIwgYpt8cceQwUP0dB327dFfqBpCL/wuje+g==","shasum":"5ef10dcb61c42ab941aaaeee907ef7f1844614ed","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.3.61.tgz","fileCount":8,"unpackedSize":557873,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCxxQ0qLNmx1+mO/WGNpHFd1j76cj9com8N4EEnLgiycQIgI4a41sgFPwrlUUlnra0/6U5DnUhj2OJttZchn3QNg5w="}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.3.61_1700617604318_0.49850283220195557"},"_hasShrinkwrap":false},"1.3.62":{"name":"gesti","version":"1.3.62","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/types/index.d.ts","type":"module","scripts":{"build":"rollup --config rollup.config.js","dev":"webpack-dev-server --config webpack.config.js --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/types/index.d.ts"}},"keywords":["图片贴图","图文编辑","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑","React Sticker","Vue Sticker"],"author":{"name":"AK1118"},"license":"MIT","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-terser":"^0.4.3","@rollup/plugin-typescript":"^11.0.0","@types/webpack":"^5.28.4","clean-webpack-plugin":"^4.0.0","html-webpack-plugin":"^5.5.0","rollup":"^3.17.3","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-copy":"^3.5.0","ts-loader":"^9.4.2","ts-node":"^10.9.1","tsconfig-paths":"^4.2.0","typescript":"^4.9.5","vconsole":"^3.15.1","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.15.1"},"_id":"gesti@1.3.62","gitHead":"15df28cc315cafcd537e9f35c79da9a5cfb8ca42","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_nodeVersion":"20.9.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-vNf4JoQF5gady9jy7WlVUVvvCjvl4j88PBw0p9/dCWoPI4BCUrfLTflitAu59Y/4ovVxCgBF8jP9UmJfi0Ej+g==","shasum":"ac54d123a10db3862d3131b548113b8eebb66292","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.3.62.tgz","fileCount":3,"unpackedSize":22075,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBeDUamt+aPZYWZU/xjolKvbKegUNRIgAIfL7IW1gn1BAiBo0k8/QRRS4U3BIRxjeulw/0Pgl2noaBZJdILHrHjVcw=="}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.3.62_1700624933553_0.3444356565112614"},"_hasShrinkwrap":false},"1.3.63":{"name":"gesti","version":"1.3.63","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/types/index.d.ts","type":"module","scripts":{"build":"rollup --config rollup.config.js","dev":"webpack-dev-server --config webpack.config.js --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/types/index.d.ts"}},"keywords":["图片贴图","图文编辑","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑","React Sticker","Vue Sticker"],"author":{"name":"AK1118"},"license":"MIT","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-terser":"^0.4.3","@rollup/plugin-typescript":"^11.0.0","@types/webpack":"^5.28.4","clean-webpack-plugin":"^4.0.0","html-webpack-plugin":"^5.5.0","rollup":"^3.17.3","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-copy":"^3.5.0","ts-loader":"^9.4.2","ts-node":"^10.9.1","tsconfig-paths":"^4.2.0","typescript":"^4.9.5","vconsole":"^3.15.1","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.15.1"},"_id":"gesti@1.3.63","gitHead":"96950f727cd32be979e532b41dfda79e33747abc","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_nodeVersion":"20.9.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-GEdDtfmoeofZzFcLdIotYccULq0bFzo/w4h35Bo7HS22jCQVfOqOKWVZlUbpacjLTo19r2X8pk2vo0/Lzbnhrg==","shasum":"907a46e4ebd467491f5f36eca47569b349b7da01","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.3.63.tgz","fileCount":8,"unpackedSize":564359,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD8Bibehkb35TgyLSr1aAWbEPlgkZo9YIDpnarlf8hrRwIgUUXrpZda0JMATz0a/fjmkZJ5TCgpBR75b0Tkq8Zk8Gs="}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.3.63_1700633304756_0.9732297304057189"},"_hasShrinkwrap":false},"1.3.64":{"name":"gesti","version":"1.3.64","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/types/index.d.ts","type":"module","scripts":{"build":"rollup --config rollup.config.js","dev":"webpack-dev-server --config webpack.config.js --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/types/index.d.ts"}},"keywords":["图片贴图","图文编辑","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑","React Sticker","Vue Sticker"],"author":{"name":"AK1118"},"license":"MIT","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-terser":"^0.4.3","@rollup/plugin-typescript":"^11.0.0","@types/webpack":"^5.28.4","clean-webpack-plugin":"^4.0.0","html-webpack-plugin":"^5.5.0","rollup":"^3.17.3","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-copy":"^3.5.0","ts-loader":"^9.4.2","ts-node":"^10.9.1","tsconfig-paths":"^4.2.0","typescript":"^4.9.5","vconsole":"^3.15.1","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.15.1"},"_id":"gesti@1.3.64","gitHead":"6e6b2ecc403c66f636487294bc41f4c9fbf61b70","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_nodeVersion":"20.9.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-p/GcJLpCjMQtyop83xgg4dH1RYqq9JP3vfcnkVXxbZb6Im8yIUGZ9sowHj4cx5g1ImLIFFXTUSQpR2rYNoq5wA==","shasum":"6d33161c47c687a3b6671cf33ca050aa2760c73d","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.3.64.tgz","fileCount":8,"unpackedSize":564921,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHdVIzUTk/GwDLdUABNZFtfrNJq7++nzsrEbtkeUhWDaAiAkbpZgG0GlAVQbhMq3SPPUPMo5DtA6fcm4BK3ONltxqQ=="}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.3.64_1700789982647_0.9593635976177721"},"_hasShrinkwrap":false},"1.3.65":{"name":"gesti","version":"1.3.65","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/types/index.d.ts","type":"module","scripts":{"build":"rollup --config rollup.config.js","dev":"webpack-dev-server --config webpack.config.js --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/types/index.d.ts"}},"keywords":["图片贴图","图文编辑","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑","React Sticker","Vue Sticker"],"author":{"name":"AK1118"},"license":"MIT","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-terser":"^0.4.3","@rollup/plugin-typescript":"^11.0.0","@types/webpack":"^5.28.4","clean-webpack-plugin":"^4.0.0","html-webpack-plugin":"^5.5.0","rollup":"^3.17.3","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-copy":"^3.5.0","ts-loader":"^9.4.2","ts-node":"^10.9.1","tsconfig-paths":"^4.2.0","typescript":"^4.9.5","vconsole":"^3.15.1","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.15.1"},"_id":"gesti@1.3.65","gitHead":"032697db45579a84505e825965b9c9ea07ab91fb","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_nodeVersion":"20.9.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-V5N35/bxt8TWe2ezAwnmz65y6e/TEGCbqArClkVaCQQBRJRMb0RStHM9BwYhEexPz6Vkjvq+5QBrneMpPL0nWQ==","shasum":"d08c91568d0f6f7c3c49a4da159ceca91544389a","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.3.65.tgz","fileCount":8,"unpackedSize":564099,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCNzhGPHK9Pc22mwQKV8DrcYCGiHBsvWtCw59G8PxgW0AIgVUw+i0+KRYRvm5dI2gVYeASP7KufZltT1bhd+dflszY="}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.3.65_1700875517048_0.5874955792720933"},"_hasShrinkwrap":false},"1.3.66":{"name":"gesti","version":"1.3.66","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/types/index.d.ts","type":"module","scripts":{"build":"rollup --config rollup.config.js","dev":"webpack-dev-server --config webpack.config.js --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/types/index.d.ts"}},"keywords":["图片贴图","图文编辑","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑","React Sticker","Vue Sticker"],"author":{"name":"AK1118"},"license":"MIT","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-terser":"^0.4.3","@rollup/plugin-typescript":"^11.0.0","@types/webpack":"^5.28.4","clean-webpack-plugin":"^4.0.0","html-webpack-plugin":"^5.5.0","rollup":"^3.17.3","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-copy":"^3.5.0","ts-loader":"^9.4.2","ts-node":"^10.9.1","tsconfig-paths":"^4.2.0","typescript":"^4.9.5","vconsole":"^3.15.1","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.15.1"},"_id":"gesti@1.3.66","gitHead":"9e609e58d7c9a0f7badf5b5ac4b6bb5d671af56f","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_nodeVersion":"20.9.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-2Jxwg49ekJvuhW2mUIa23J3HUnPzsATCYgLuo0NfbnHg4uh5jQbczJutHvsbEBUAC+CAlefUD2aFTw1c2WHdgg==","shasum":"84f4e4bb84b514c4c25b484ee192cfefe459afe2","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.3.66.tgz","fileCount":8,"unpackedSize":564087,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBtxTFj7zxPEoPWHYqLDZxA9SDkR7G5GsrTV8b6AiTd3AiEA9AykD63Nn+aefSnJvbNY6xTcalzTn75WKbTaAmOWF+A="}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.3.66_1700876070822_0.18035601970783754"},"_hasShrinkwrap":false},"1.3.88":{"name":"gesti","version":"1.3.88","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/types/index.d.ts","type":"module","scripts":{"build":"rollup --config rollup.config.js","test":"rollup --config rollup.config.js && node --loader ts-node/esm --inspect ./testGesti.ts","dev":"webpack-dev-server --config webpack.config.js --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/types/index.d.ts"}},"keywords":["图片贴图","图文编辑","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑","React Sticker","Vue Sticker"],"author":{"name":"AK1118"},"license":"MIT","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-terser":"^0.4.3","@rollup/plugin-typescript":"^11.0.0","@types/webpack":"^5.28.4","clean-webpack-plugin":"^4.0.0","glob":"^10.3.10","html-webpack-plugin":"^5.5.0","pako":"^2.1.0","rollup":"^3.17.3","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-copy":"^3.5.0","ts-loader":"^9.4.2","ts-node":"^10.9.1","tsconfig-paths":"^4.2.0","typescript":"^4.9.5","vconsole":"^3.15.1","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.15.1"},"_id":"gesti@1.3.88","gitHead":"bfb3f56454e9fa5f119ed9a01094765b88780ba4","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_nodeVersion":"20.9.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-nY4YZ8W1CiyDBALI5aIJ53OOTm9TzWLnHpy3tbvtIefTpFzZJIpjEaWyu4H30lJd/wkEl+16RGX7Ke02OzvrHA==","shasum":"496ccf416797213c0b3a2b65ff184a2f58bd1bd2","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.3.88.tgz","fileCount":3,"unpackedSize":22231,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD8EBhUgmaCukTR6AG0Q7I52k3VpDrerUhQOO/ouppb2AIgfakBbAgIBvN/igCx+Zddf6ysvUoKaY9f8NHrAiJgJ5o="}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.3.88_1707213993823_0.580310030472486"},"_hasShrinkwrap":false},"1.3.89":{"name":"gesti","version":"1.3.89","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/types/index.d.ts","type":"module","scripts":{"build":"rollup --config rollup.config.js","test":"rollup --config rollup.config.js && node --loader ts-node/esm --inspect ./testGesti.ts","dev":"webpack-dev-server --config webpack.config.js --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/types/index.d.ts"}},"keywords":["图片贴图","图文编辑","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑","React Sticker","Vue Sticker"],"author":{"name":"AK1118"},"license":"MIT","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-terser":"^0.4.3","@rollup/plugin-typescript":"^11.0.0","@types/webpack":"^5.28.4","clean-webpack-plugin":"^4.0.0","glob":"^10.3.10","html-webpack-plugin":"^5.5.0","pako":"^2.1.0","rollup":"^3.17.3","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-copy":"^3.5.0","ts-loader":"^9.4.2","ts-node":"^10.9.1","tsconfig-paths":"^4.2.0","typescript":"^4.9.5","vconsole":"^3.15.1","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.15.1"},"_id":"gesti@1.3.89","gitHead":"a17b94b9e901c257c5e462d6699baef31727cb98","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_nodeVersion":"20.9.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-/pG2LMwYLR7VCb9ng+ccC3LwrDM+w1HA0QBievVnWXufLHiEHCT8GEoCT4t7UDmnhp7bOrD4m5+9xbtxBsZYyA==","shasum":"e9290a0af725154fce2d384a17371218bd84dc72","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.3.89.tgz","fileCount":13,"unpackedSize":664692,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEE+lD1sEZ8YdvJpmxu9a09XFULA8KaOXZi3oyFzsX3PAiEA+vU3VYFMl9kIrhQHAPSz9IksISRWlGbpaWe6IL5vHAg="}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.3.89_1708324920562_0.85338592361654"},"_hasShrinkwrap":false},"1.3.90":{"name":"gesti","version":"1.3.90","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/types/index.d.ts","type":"module","scripts":{"build":"rollup --config rollup.config.js","test":"rollup --config rollup.config.js && node --loader ts-node/esm --inspect ./testGesti.ts","dev":"webpack-dev-server --config webpack.config.js --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/types/index.d.ts"}},"keywords":["图片贴图","图文编辑","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑","React Sticker","Vue Sticker"],"author":{"name":"AK1118"},"license":"MIT","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-terser":"^0.4.3","@rollup/plugin-typescript":"^11.0.0","@types/webpack":"^5.28.4","clean-webpack-plugin":"^4.0.0","glob":"^10.3.10","html-webpack-plugin":"^5.5.0","pako":"^2.1.0","rollup":"^3.17.3","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-copy":"^3.5.0","ts-loader":"^9.4.2","ts-node":"^10.9.1","tsconfig-paths":"^4.2.0","typescript":"^4.9.5","vconsole":"^3.15.1","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.15.1"},"_id":"gesti@1.3.90","gitHead":"06ce7e2568fd48b758a2122e38de94523d9993ea","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_nodeVersion":"20.9.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-8HfGTq5PxsZdBaScS/HuSsl4yYczeWDomhSzmlJ432oujKocaidIDW5q2zjJZa+8MqeS5fEFxhJb3NjloThXbw==","shasum":"7f910c10c80d25c60e6edfd3df2b26a813094611","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.3.90.tgz","fileCount":13,"unpackedSize":671756,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEsF1rCi5a7Ot3HVUPEMFNem/I/a7H+v9EPf6ErJ5IUxAiBWb4L9biYiH5sDtjceFPj0HaHTiCjTk9WTb8Kc9oTOUQ=="}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.3.90_1708678634743_0.6639859613547918"},"_hasShrinkwrap":false},"1.3.91":{"name":"gesti","version":"1.3.91","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/types/index.d.ts","type":"module","scripts":{"build":"rollup --config rollup.config.js","test":"rollup --config rollup.config.js && node --loader ts-node/esm --inspect ./testGesti.ts","dev":"webpack-dev-server --config webpack.config.js --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/types/index.d.ts"}},"keywords":["图片贴图","图文编辑","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑","React Sticker","Vue Sticker"],"author":{"name":"AK1118"},"license":"MIT","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-terser":"^0.4.3","@rollup/plugin-typescript":"^11.0.0","@types/webpack":"^5.28.4","clean-webpack-plugin":"^4.0.0","glob":"^10.3.10","html-webpack-plugin":"^5.5.0","pako":"^2.1.0","rollup":"^3.17.3","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-copy":"^3.5.0","ts-loader":"^9.4.2","ts-node":"^10.9.1","tsconfig-paths":"^4.2.0","typescript":"^4.9.5","vconsole":"^3.15.1","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.15.1"},"_id":"gesti@1.3.91","gitHead":"0a1ead8404508b3e62d8e0c8c090d45b56233081","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_nodeVersion":"20.9.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-/14w8WVxH6zVTsX1/WnctszuKuiql9pA0Euf6Ya6kHkjPWk2bYU9Fqgl1D+4CjjfRYQMXEB1QFccYFayFjvxaQ==","shasum":"f49a1fbcb46a1484eaabc0df9083efd3e528c937","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.3.91.tgz","fileCount":13,"unpackedSize":674954,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC5K3OMzRPe/AUITT9ZtJ4BwiBt1+7FVd1eJZOffYSEhgIhAIhWY1CZZhlAYgzKKi0m/2J6CO08L1pz3cvAlzdXavxy"}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.3.91_1708928030201_0.6255196602883533"},"_hasShrinkwrap":false},"1.3.92":{"name":"gesti","version":"1.3.92","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/types/index.d.ts","type":"module","scripts":{"build":"rollup --config rollup.config.js","test":"rollup --config rollup.config.js && node --loader ts-node/esm --inspect ./testGesti.ts","dev":"webpack-dev-server --config webpack.config.js --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/types/index.d.ts"}},"keywords":["图片贴图","图文编辑","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑","React Sticker","Vue Sticker"],"author":{"name":"AK1118"},"license":"MIT","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-terser":"^0.4.3","@rollup/plugin-typescript":"^11.0.0","@types/webpack":"^5.28.4","clean-webpack-plugin":"^4.0.0","glob":"^10.3.10","html-webpack-plugin":"^5.5.0","pako":"^2.1.0","rollup":"^3.17.3","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-copy":"^3.5.0","ts-loader":"^9.4.2","ts-node":"^10.9.1","tsconfig-paths":"^4.2.0","typescript":"^4.9.5","vconsole":"^3.15.1","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.15.1"},"_id":"gesti@1.3.92","gitHead":"8f3483734030ae73a9633657783c46eda7192a13","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_nodeVersion":"20.9.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-RH7ZK+M7BDqKqynte7D/fi6AbV1bAEclwoZGxgshRQBTWb1h08jzDRArddL12pysQZRJXiWO5D63FUZqHamh1w==","shasum":"ae6d276d71d3daebf584d54e59c2ee670fa8ac23","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.3.92.tgz","fileCount":13,"unpackedSize":675022,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCTsuUrA6LK8QQ1/LnhXLlTYDp6A3oxCIOyVbq2h1KNyQIhAKltltRRof87kO+EMy+LB0aKbcDNs/BXij0JXSCOflyn"}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.3.92_1708934782025_0.6190501731304885"},"_hasShrinkwrap":false},"1.3.93":{"name":"gesti","version":"1.3.93","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/types/index.d.ts","type":"module","scripts":{"build":"rollup --config rollup.config.js","test":"rollup --config rollup.config.js && node --loader ts-node/esm --inspect ./testGesti.ts","dev":"webpack-dev-server --config webpack.config.js --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/types/index.d.ts"}},"keywords":["图片贴图","图文编辑","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑","React Sticker","Vue Sticker"],"author":{"name":"AK1118"},"license":"MIT","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-terser":"^0.4.3","@rollup/plugin-typescript":"^11.0.0","@types/webpack":"^5.28.4","clean-webpack-plugin":"^4.0.0","glob":"^10.3.10","html-webpack-plugin":"^5.5.0","pako":"^2.1.0","rollup":"^3.17.3","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-copy":"^3.5.0","ts-loader":"^9.4.2","ts-node":"^10.9.1","tsconfig-paths":"^4.2.0","typescript":"^4.9.5","vconsole":"^3.15.1","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.15.1"},"_id":"gesti@1.3.93","gitHead":"9ed227f2d2b2bc819a2c36ee529e9860bfc57654","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_nodeVersion":"20.9.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-l+DEaDE/4ilGkmurU4LhM7GtghYQYsImnTEyMG0vEGzdoUxKAzwWJHv5vpG6B8HH2N5/FN1FjHgukFjvbDSOxQ==","shasum":"ea4ce6814e8a05f29264a6f71ce1ff7a4b4c1724","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.3.93.tgz","fileCount":13,"unpackedSize":677363,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDuItJgCvHUjMzfirmc7kVYmS5zTCdJIFYUN0qqXfFUCAiBXckS9fB2fUUJ8/IGTV/LNm+Db7PG8I0fQgmtLlesleQ=="}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.3.93_1708939292930_0.4817670186285665"},"_hasShrinkwrap":false},"1.3.94":{"name":"gesti","version":"1.3.94","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/types/index.d.ts","type":"module","scripts":{"build":"rollup --config rollup.config.js","test":"rollup --config rollup.config.js && node --loader ts-node/esm --inspect ./testGesti.ts","dev":"webpack-dev-server --config webpack.config.js --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/types/index.d.ts"}},"keywords":["图片贴图","图文编辑","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑","React Sticker","Vue Sticker"],"author":{"name":"AK1118"},"license":"MIT","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-terser":"^0.4.3","@rollup/plugin-typescript":"^11.0.0","@types/webpack":"^5.28.4","clean-webpack-plugin":"^4.0.0","glob":"^10.3.10","html-webpack-plugin":"^5.5.0","pako":"^2.1.0","rollup":"^3.17.3","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-copy":"^3.5.0","ts-loader":"^9.4.2","ts-node":"^10.9.1","tsconfig-paths":"^4.2.0","typescript":"^4.9.5","vconsole":"^3.15.1","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.15.1"},"_id":"gesti@1.3.94","gitHead":"bf7aaf6e35e96c9564bb55a350512110d3ecbe00","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_nodeVersion":"20.9.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-3lq7L2C4p/zH5DmLW7hUVYl+3NKWd1jFUEh+7/sWdIlNmsRLXmiHDRj0lKbG+DeiWEd995IQWaH4TICmP039OQ==","shasum":"ce5b3f53313c9ea91c967d5d48b1e3add739bd12","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.3.94.tgz","fileCount":13,"unpackedSize":676755,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDmMvJyO+XT7xBplrrL3B2bSPHaq0PoY15tGfUm7MLM2QIgdz+zKZbttC7uUxelsqEgwYPb4ZoYcKiGkb9Ny1Ycwdc="}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.3.94_1709113910982_0.05052108105113273"},"_hasShrinkwrap":false},"1.3.95":{"name":"gesti","version":"1.3.95","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/types/index.d.ts","type":"module","scripts":{"build":"rollup --config rollup.config.js","test":"rollup --config rollup.config.js && node --loader ts-node/esm --inspect ./testGesti.ts","dev":"webpack-dev-server --config webpack.config.js --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/types/index.d.ts"}},"keywords":["图片贴图","图文编辑","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑","React Sticker","Vue Sticker"],"author":{"name":"AK1118"},"license":"MIT","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-terser":"^0.4.3","@rollup/plugin-typescript":"^11.0.0","@types/webpack":"^5.28.4","clean-webpack-plugin":"^4.0.0","glob":"^10.3.10","html-webpack-plugin":"^5.5.0","pako":"^2.1.0","rollup":"^3.17.3","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-copy":"^3.5.0","ts-loader":"^9.4.2","ts-node":"^10.9.1","tsconfig-paths":"^4.2.0","typescript":"^4.9.5","vconsole":"^3.15.1","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.15.1"},"_id":"gesti@1.3.95","gitHead":"e3fbaff49bf92061ca75c0816be8cac97998b9ff","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_nodeVersion":"20.9.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-BXpkn1wCpgQgiY9PN5LRhpnX3UdatOMeuRJbO3kLsSWxZCpYAN51gdc0TYq9gyKQ1BqzhsbE60kcAonyeQY/4Q==","shasum":"b887d787d1c3eca7105a73fef062edd92f55f781","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.3.95.tgz","fileCount":13,"unpackedSize":685343,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDHmOUErLzvyOOjo8+hjlIMWIY6Dw/xqWI/CldAyUN0rQIhAM8gAZ56ae2k6BIdXQHp7kTSQtrAd0Pn4YUcgUC9fJqu"}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.3.95_1709603981484_0.024419312478739963"},"_hasShrinkwrap":false},"1.3.96":{"name":"gesti","version":"1.3.96","description":"一个运行飞快的前端Canvas贴图工具","main":"dist/index.esm.js","module":"dist/index.amd.js","types":"dist/types/index.d.ts","type":"module","scripts":{"build":"rollup --config rollup.config.js","test":"rollup --config rollup.config.js && node --loader ts-node/esm --inspect ./testGesti.ts","dev":"webpack-dev-server --config webpack.config.js --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/types/index.d.ts"}},"keywords":["图片贴图","图文编辑","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑","React Sticker","Vue Sticker"],"author":{"name":"AK1118"},"license":"MIT","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-terser":"^0.4.3","@rollup/plugin-typescript":"^11.0.0","@types/webpack":"^5.28.4","clean-webpack-plugin":"^4.0.0","glob":"^10.3.10","html-webpack-plugin":"^5.5.0","pako":"^2.1.0","rollup":"^3.17.3","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-copy":"^3.5.0","ts-loader":"^9.4.2","ts-node":"^10.9.1","tsconfig-paths":"^4.2.0","typescript":"^4.9.5","vconsole":"^3.15.1","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.15.1"},"_id":"gesti@1.3.96","gitHead":"1051023a8285131262900819e722aeb1fea8428f","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_nodeVersion":"20.9.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-d7DlbLeABnwBMlNBIKucjywDIHFtTrEYKLVEk5zS1M3g9g4iV94hWyl85BAHatI0+emFwvRp+EJjuta+k0THKQ==","shasum":"901a272969e6cdd61cf83e607be2634dd56e6900","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.3.96.tgz","fileCount":13,"unpackedSize":706648,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDl04xzY8cF/G8w4C+s/Jx4vIN56hos/jQZqrjd1e6hrwIhAMUJVSSP6YhbTRLZU2wHpKARBwZAii5A4xAnkx3Di8of"}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.3.96_1711682400920_0.8457383138642107"},"_hasShrinkwrap":false},"1.3.97":{"name":"gesti","version":"1.3.97","description":"一个运行飞快的前端Canvas贴图工具","main":"./dist/index.js","types":"./dist/types/index.d.ts","type":"module","scripts":{"build":"rollup --config rollup.config.js","test":"rollup --config rollup.config.js && node --loader ts-node/esm --inspect ./testGesti.ts","dev":"webpack-dev-server --config webpack.config.js --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"default":"./index.js","import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/types/index.d.ts"}},"keywords":["图片贴图","图文编辑","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑","React Sticker","Vue Sticker"],"author":{"name":"AK1118"},"license":"MIT","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-terser":"^0.4.3","@rollup/plugin-typescript":"^11.0.0","@types/webpack":"^5.28.4","clean-webpack-plugin":"^4.0.0","glob":"^10.3.10","html-webpack-plugin":"^5.5.0","pako":"^2.1.0","rollup":"^3.17.3","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-copy":"^3.5.0","ts-loader":"^9.4.2","ts-node":"^10.9.1","tsconfig-paths":"^4.2.0","typescript":"^4.9.5","vconsole":"^3.15.1","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.15.1"},"_id":"gesti@1.3.97","readme":"### 主要特性\r\n\r\n- Typescript开发，JavaScript,TypeScript都支持\r\n- 支持 ESM & AMD ,支持 TS\r\n- 基于原生Canvas，兼容主流浏览器，PC端以及移动端,兼容微信小程序，Uniapp App 端。\r\n- 极简操作，更多功能，持续更新。\r\n\r\n# 效果图\r\n\r\n<img src=\"https://new.ivypha.com/static/uploads/2023/2/14/c3e00b72dc487661cdc63f03853215aa.gif\"/>\r\n\r\n# Gesti\r\n\r\n![](https://img.shields.io/github/stars/AK1118/Gesti.svg)\r\n\r\n**目录 (Table of Contents)**\r\n\r\n- [保存](#保存)\r\n- [在 微信小程序 | uniapp 端使用](#在-微信小程序--uniapp-端使用)\r\n- [可能会遇到的问题](#可能会遇到的问题)\r\n- [示例](#示例)\r\n\t\t\t- [HTML](#html)\r\n\t\t\t- [JavaScript 或 Typescript](#javascript-或-typescript)\r\n\r\n\r\n### 安装\r\n\r\n  ```\r\n  npm install gesti\r\n  ```\r\n\r\n### 引入使用\r\n\r\n  ```\r\n  import Gesti from \"gesti\";\r\n  ```\r\n\r\n### 初始化\r\n\r\n  ```\r\n  const gesti=new Gesti();\r\n      //h5端适用，其他端请参考API自行添加\r\n  const controller=gesti.initialization({\r\n    renderContext:g,\r\n    rect:{\r\n       canvasWidth:canvas.width,\r\n       canvasHeight:canvas.height\r\n     }\r\n  });\r\n  ```\r\n\r\n### 加入文字\r\n\r\n  ```\r\n    controller.load(new TextBox('New Text'));\r\n  ```\r\n\r\n# API\r\n\r\n## Gesti\r\n\r\n| 方法名      | 返回值类型  |  所属    |    参数    |   说明   |\r\n| :----:      |   :----: | :----:   |  :----:   | :----:      | \r\n| ~~init~~      |    void      |     Gesti   |    (canvas?: HTMLCanvasElement, paint?: CanvasRenderingContext2D, rect?:rectParam)   |     初始化 Gesti 时调用，共3个可选参数。canvas 和 paint 必须二选一，且没有传入canvas时，必须传入paint 和 rect.       |\r\n| ~~setConfig~~      |    void      |     Gesti   |   (config?: GestiConfigOption)   |     修改或设置配置，修改后会自动调用GestiController.update函数       |\r\n| initialization      |    GestiController      |     Gesti   |   (options:InitializationOption)   |     初始化gesti，返回控制器       |\r\n| static mount      |    [Gesti,GestiController]      |     Gesti   |   (options:InitializationOption)   |     通过静态方法初始化gesti, 返回gesti实例和它的控制器      |\r\n| static installPlugin      |    void      |     Gesti   |   (key:PluginsKey,plugin:any)   |     安装预设插件，使用某功能时再安装对应插件      |\r\n\r\n## GestiController\r\n\r\n| 方法名      | 返回值类型              |  所属    |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |    :----:   |   :----: |\r\n| updateText  | void              |    GestiController  |       (text: string, options?:TextOptions )     |      更新被选中的文字图层的文字内容，或者文字属性   |\r\n| layerLower  | void             |      GestiController     |    -      |    图层向下移动一层    |\r\n| layerRise  | void             |      GestiController     |     -     |    图层向上移动一层    |\r\n| layerTop  | void             |      GestiController     |     -     |    图层置于最顶层    |\r\n| layerBottom  | void             |      GestiController     |    -      |    图层置于最底层    |\r\n| lock    | void             |      GestiController     |     -     |    锁定当前选中图层    |\r\n| deLock    | void             |      GestiController     |     -     |    解锁当前选中图层    |\r\n| cancel    | void             |      GestiController     |      -    |    取消当前被聚焦对象    |\r\n| cancelAll    | void             |      GestiController     |     -     |    取消所有被聚焦对象    |\r\n| down    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标\\|手指点击事件时调用    |\r\n| up    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标\\|手指抬起事件时调用    |\r\n| move    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标\\|手指移动事件时调用    |\r\n| wheel    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标滚轮事件时调用    |\r\n| addListener    | any  |   GestiController |    (listenType:\"onSelect\"\\|\"onHide\"\\|\"onCancel\",callback:ListenerCallback)     |   监听图层操作，目前支持监听选中、取消选中和隐藏    |\r\n| removeListener    | void  |   GestiController |    (listenType:GestiControllerListenerTypes,hook:ListenerCallback)     |   根据addListener返回值，移除监听函数    |\r\n| rotate    | Promise\\<void\\>  |   GestiController |    angle: number     |   旋转被选中对象,传入弧度。可传入  角度*Math.PI/180     |\r\n| upward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向上移动距离 1     |\r\n| downward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向下移动距离 1     |\r\n| leftward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向左移动距离 1     |\r\n| rightward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向右移动距离 1     |\r\n| update    | void  |   GestiController |    -    |   调用后会重绘canvas,一般在改变数据后画布未刷新时使用     |\r\n| importAll    | Promise\\<void\\>  |   GestiController |    (json: string)   |   以json形式导入对象集合 H5 |\r\n| exportAll  | Promise\\<string\\>  |   GestiController |    -   |   以json形式导出对象集合 H5    |\r\n| center   | void  |   GestiController |   (axis?: \"vertical\" \\| \"horizon\")   |  垂直居中或者水平居中，不填写参数水平垂直居中    |\r\n| cancelEvent   | void  |   GestiController |   -   |  取消Gesti自带的鼠标手指时间监听。使用该函数后需要自行调用鼠标各个事件，请参考上方  down,up,move  ,使用详情参考Demo    |\r\n| addWrite   | \tvoid  |   GestiController |   (options: {type: \"circle\" \\| \"write\" \\| \"line\" \\| \"rect\" \\| \"none\";lineWidth?: number;color?: string;isFill?: boolean;})   |  添加涂鸦功能，调用该函数且传入options.type不为\"none\"时，下一次在canvas内滑动会触发生成对应的涂鸦对象,直到再次调用该函数且options.type为\"none\"时停止    |\r\n| getViewObjectById  | Promise\\<ViewObject\\>  |   GestiController |    (id:string)   |  通过id获取ViewObject对象    |\r\n\r\n\r\n| 属性名      | 返回值类型         |  所属    |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |    :----:   |   :----: |\r\n| currentViewObject| ViewObject | GestiController | - | 获取当前选中对象|\r\n\r\n\r\n## ViewObject（重要的阅读）\r\n- 画布内的可操作对象，每一张图片对象或者文字对象或者其他都是它在画布上的映射。\r\n- 获取它的途径一般来自于创建对象，它是一个基类，其子类还有TextBox , ImageBox ,WriteViewObj\r\n\r\n\r\n| 方法名      |   返回值         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|getBaseInfo | Object |   -    |    获取对象的向量信息      |\r\n|setName | void |  (name: string)    |    给对象设置名字      |\r\n|lock | void |  -   |    锁住它，不让他被操作      |\r\n|unLock | void |  -   |    解锁      |\r\n|hide  | void |  -   |    隐藏它，不是删除，删除我还没实现      |\r\n|show  | void |  -   |    显示      |\r\n|installButton  | void | (button: Button)   |   Gesti内不是没有按钮，是需要自己new过后安装     |\r\n|unInstallButton  | void | (buttons: Array<Button>)   |   卸载按钮     |\r\n|setSize  | void | (size: { width?: number; height?: number })   |   设置大小     |\r\n|setDecoration  | void | (args:any)   |  设置对象装饰，比如颜色，线条高度等，每个子类传入的参数不一     |\r\n|setOpacity  | void | (opacity:number)   |  设置对象不透明度，取值 0.0~1.0     |\r\n|toBackground  | void |  -   |  将该对象设置为背景,设置背景后可设置层级。所有事件将会被穿透   |\r\n\r\n\r\n| 属性名      |   返回值         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|rect | Rect |   -    |  获取对象大小最为合适    |\r\n|family | ViewObjectFamily |   -    |  获取对象类型,Gesti内可操作对象有多个家族，用来区分哪个对象是哪类    |\r\n|name | string |   -    |  有时候对象可以拥有一个名字    |\r\n|selected | boolean |   -    |  已经被选中了吗    |\r\n|originFamily | ViewObjectFamily |   -    |  家族起源家族，比如write是起源家族，它下面有line,rect，circle等分支家族    |\r\n|id | string |   -    |  设置该对象id    |\r\n\r\n\r\n\r\n## Button 对象\r\n- 控制ViewObject的功能按钮\r\n\r\n\r\n| 方法名      |   返回值         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|drawButton | -  |   Function(position: Vector, size: Size,radius:number, paint: Painter)    |    可重写该方法实现自定义按钮样式      |\r\n\r\n\r\n# Hooks 🚀\r\n- 还挺好用\r\n\r\n### 创建对象系列\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|createGesti | Gesti |     (config?: GestiConfigOption)    |    创建一个Gesti实例      |\r\n|useController | GestiController |    (target?: Gesti)    |  得到一个Gesti实例的控制器    |\r\n\r\n### 监听系列\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|onSelected  |   -    |    (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    选中对象时回调      |\r\n|onHover | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    是的，就像CSS3的Hover一样      |\r\n|onLeave | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    离开对象时调用      |\r\n|onCancel | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    取消选中时      |\r\n|onHide | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    隐藏可操作对象时      |\r\n|onUpdate | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    刷新画布时      |\r\n|onLoad | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    载入新的对象到画布内时      |\r\n|onBeforeDestroy  | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    销毁Gesti实例前执行      |\r\n|onDestroy| - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    销毁Gesti实例后执行      |\r\n|removeListener | - | (type: GestiControllerListenerTypes,hook: (_args: any) => any, target?: Gesti)    |    根据addListener返回值，移除监听函数    |\r\n\r\n\r\n\r\n\r\n\r\n### 添加预设系列\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|addVerticalLine | Promise\\<ViewObject> |    -     |    新增预设垂直线到画布内      |\r\n|addHorizonLine | Promise\\<ViewObject> |    -     |    新增预设水平线到画布内      |\r\n|addRect | Promise\\<ViewObject> |    -     |    新增预设矩形到画布内      |\r\n|addCircle | Promise\\<ViewObject> |    -     |    新增预设圆形到画布内      |\r\n\r\n\r\n### 创建ViewObject可操作对象系列\r\n- 自己创建的对象，用着放心\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|createTextBox | TextBox |   (text: string, options?: TextOptions)     |    创建一个文本对象      |\r\n|createXImage | XImage |   (option: {data,width:number,height:number})  |    创建一个XImage对象，注意，这个并不是你所看到的那个图片，可以理解为它是图片源，渲染由下面这个类做到      |\r\n|createImageBox | ImageBox |   (xImage: XImage)     |    创建一个图片对象      |\r\n|createDragButton | Button | (view: ViewObject)    |    创建一个拖拽按钮      |\r\n|createHorizonButton | Button | (view: ViewObject)    |    创建一个水平拖拽按钮      |\r\n|createVerticalButton | Button | (view: ViewObject)    |    创建一个垂直拖拽按钮      |\r\n|createRotateButton | Button | (view: ViewObject)    |    创建一个旋转按钮      |\r\n|createLockButton | Button | (view: ViewObject)    |    创建一个上锁按钮      |\r\n|createUnlockButton | Button | (view: ViewObject)    |    创建一个解锁按钮      |\r\n|createMirrorButton  | Button | (view: ViewObject)    |    创建一个镜像翻转按钮      |\r\n|createCloseButton  | Button | (view: ViewObject)    |    创建一个关闭按钮      |\r\n|installButton | - | (view: ViewObject, button: Button \\| Array<Button>)    |    安装按钮到ViewObject上      |\r\n|unInstallButton | - | (view: ViewObject, button: Button \\| Array<Button>)   |    卸载ViewObject上的按钮   |\r\n|loadToGesti | - |    (view: ViewObject, target?: Gesti)    |   加入一个ViewObject对象到画布内,以上的类都是继承于ViewObjet      |\r\n\r\n\r\n\r\n### use系列\r\n- 涂鸦功能\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|useGraffitiRect | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，矩形     |\r\n|useGraffitiCircle | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，圆形     |\r\n|useGraffitiLine | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，线条     |\r\n|useGraffitiWrite | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，手写板     |\r\n|useCloseGraffiti | - |    (option?: {...}, target?: Gesti    | 关闭涂鸦功能    |\r\n|useTextHandler | - |    (option?: {...}, target?: Gesti    | 得到一个TextBox实例控制器，用于控制它的参数    |\r\n|~~useReader~~ | Promise<ViewObject> |    (json: string)    | 传入特定格式的json，返回一个ViewObject对象    |\r\n|useReaderH5 | Promise<ViewObject> |    (json: string)    | 传入特定格式的json，返回一个ViewObject对象  H5    |\r\n|useReaderWeChat | Promise<ViewObject> |    (json: string)    | 传入特定格式的json，返回一个ViewObject对象 微信小程序 canvas 2d   |\r\n|useGetViewObject | Promise<ViewObject> |    (id: string)    |  通过id获取ViewObject对象    |\r\n\r\n\r\n### do系列\r\n- 需要做一些操作? 交给它们\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|doSelect | - |    (view?: ViewObject, target?: Gesti)    |  选中传入对象  |\r\n|doRotate | - |     (angle: number, existing?: boolean, view?: ViewObject, target?: Gesti)    |  旋转一个对象，不传入view默认当前选中对象  |\r\n|doPosition | - |     (x: number, x: number, view?: ViewObject, target?: Gesti)    |  设置一个对象的位置，不传入view默认当前选中对象  |\r\n|doCleanAll | - |    (view?: ViewObject, target?: Gesti)    |  画布内清空所有元素  |\r\n|doLayerLower | - |    (view?: ViewObject, target?: Gesti)    |  所在图层向下一层  |\r\n|doLayerRise | - |    (view?: ViewObject, target?: Gesti)    |  所在图层向上一层  |\r\n|doLayerTop | - |    (view?: ViewObject, target?: Gesti)    |  置于顶层  |\r\n|doLayerBottom | - |    (view?: ViewObject, target?: Gesti)    |  置于底层  |\r\n|doLock | - |    (view?: ViewObject, target?: Gesti)    |  锁住对象  |\r\n|doUnLock | - |    (view?: ViewObject, target?: Gesti)    |  解锁对象  |\r\n|doUpward | - |    (view?: ViewObject, target?: Gesti)    |  位置微调，上一个单位  |\r\n|doDownward | - |    (view?: ViewObject, target?: Gesti)    |  位置微调，下一个单位 |\r\n|doLeftward | - |    (view?: ViewObject, target?: Gesti)    |   位置微调，左一个单位  |\r\n|doRightward | - |    (view?: ViewObject, target?: Gesti)    |  位置微调，右一个单位  |\r\n|doCenter | - |   (view?: ViewObject, axis?: CenterAxis, target?: Gesti)    |  居中，可选水平或者垂直，不填就垂直水平居中  |\r\n|doCancel | - |    (view?: ViewObject, target?: Gesti)    |  取消选中单个/现在被选中的对象  |\r\n|doCancelAll | - |    -    |  取消所有被选中对象  |\r\n|doUpdate | - |    -    |  手动刷新画布  |\r\n|doCancelEvent | - |    -    |  取消原有画布事件代理,调用该方法后需要自定调用drive系列Hook,否则Gesti无法监听到您的手指/鼠标的位置  |\r\n\r\n\r\n### drive系列\r\n- 自定义鼠标/手指事件代理\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|driveMove | - |   (e:Event)    |  鼠标/手指移动时  |\r\n|driveUp | - |   (e:Event)    |  鼠标/手指抬起时  |\r\n|driveDown | - |   (e:Event)    |  鼠标/手指放下时  |\r\n|driveWheel | - |   (e:Event)    |  鼠标滚轮时  |\r\n\r\n\r\n### 尺寸适配\r\n- 物理单位转换像素  此处dpi取96   \r\n- 值得注意:Gesti内没有一个标准的单位，所有的单位都由您决定，比如画布创建设置大小时，图片创建传入时，字体设置大小时。总之，您输入多大，Gesti就为您显示多大（比如输入图片高宽为物理单位一厘米，那么在Gesti内您所看到的图片大小也会是一厘米高宽）\r\n- 以下提供的方法仅供参考，如需更精准的方案您可以自己实现。\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|mmToIn       | number          |   (mm:number)    |  毫米转换为英寸  |\r\n|inToPx       |number            |  (inch:number)    | 英寸转换为像素  |\r\n|ptToPx       | number             |   (pt:number)    | 英榜转换为像素（一般设置字体时用它）  |\r\n\r\n\r\n\r\n\r\n# 保存\r\n\r\n- 该库只是为您提供了canvas的代理操作，并没有改变canvas的任何原有API，所以您可以使用canvas自带的API进行存储。\r\n\r\n# 可能会遇到的问题\r\n- 图片导入不出现？数据变了图片没动？试试update方法刷新一下。\r\n- hooks和普通模式有啥区别吗? 个人认为Hooks更适合FP爱好者，普通模式适合OOP爱好者。\r\n- 图片 | 文字上没有可以直接操作的按钮吗？ 有,不过需要您自己new成按钮对象安装上去。\r\n- 为什么路由切换后再返回页面会发生报错？重新init一下，记得controller也要重新赋值。\r\n- 其他问题可以加下面QQ群\r\n- Demo下载地址:  https://ext.dcloud.net.cn/plugin?id=10867 \r\n\r\n# 示例\r\n\r\n***用它，没有多麻烦。***\r\n\r\n####  HTML\r\n\r\n\t<canvas id=\"canvas\" width=\"300\" height=\"300\"></canvas>\r\n\r\n#### JavaScript\r\n\r\n    const canvas = document.querySelector(\"canvas\");\r\n    const renderContext= canvas.getContext(\"2d\");\r\n    const [gesti,controller]=Gesti.mount({\r\n        renderContext,\r\n        rect:{\r\n          canvasWidth:canvas.width,\r\n          canvasHeight:canvas.height\r\n        }\r\n    });\r\n    controller.load(new Text(`New Text.\r\n      新建文本`))\r\n\r\n\r\n\r\n***不是吗？***\r\n\r\n\r\n### 需要帮助？\r\n\r\n- 添加QQ群聊(Gesti交流群),我们讨论一下问题  756829516 ","readmeFilename":"README.md","gitHead":"7e6e41ae1e4932c36240f0d1feec50474666dbf4","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_nodeVersion":"20.9.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-aC0HS9W4nVDisthAhbDI880BgJpmTrhsQM8CKCF7G13T8K/yh0t3zdzNqZqm35OK1lvJO9ujDVKWmHD4Q/i86g==","shasum":"d0d99670868dd25673f43fff5d9d69d5e167ff9c","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.3.97.tgz","fileCount":16,"unpackedSize":1005550,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEMCHzZUypvpWm9pe8iXSQTV0pUgdnFXmxtsQf7DMhgad44CIHJrU9tg69bVGjxE+JBWbWIvQlakiSTBYXKtP3ZxQCfa"}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.3.97_1711951898952_0.1702153473930732"},"_hasShrinkwrap":false},"1.3.98":{"name":"gesti","version":"1.3.98","description":"一个运行飞快的前端Canvas贴图工具","main":"./dist/index.js","types":"./dist/types/index.d.ts","type":"module","scripts":{"build":"rollup --config rollup.config.js","test":"rollup --config rollup.config.js && node --loader ts-node/esm --inspect ./testGesti.ts","dev":"webpack-dev-server --config webpack.config.js --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"default":"./index.js","import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/types/index.d.ts"}},"keywords":["图片贴图","图文编辑","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑","React Sticker","Vue Sticker"],"author":{"name":"AK1118"},"license":"MIT","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-terser":"^0.4.3","@rollup/plugin-typescript":"^11.0.0","@types/webpack":"^5.28.4","clean-webpack-plugin":"^4.0.0","glob":"^10.3.10","html-webpack-plugin":"^5.5.0","pako":"^2.1.0","rollup":"^3.17.3","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-copy":"^3.5.0","ts-loader":"^9.4.2","ts-node":"^10.9.1","tsconfig-paths":"^4.2.0","typescript":"^4.9.5","vconsole":"^3.15.1","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.15.1"},"_id":"gesti@1.3.98","readme":"### 主要特性\r\n\r\n- Typescript开发，JavaScript,TypeScript都支持\r\n- 支持 ESM & AMD ,支持 TS\r\n- 基于原生Canvas，兼容主流浏览器，PC端以及移动端,兼容微信小程序，Uniapp App 端。\r\n- 极简操作，更多功能，持续更新。\r\n\r\n# 效果图\r\n\r\n<img src=\"https://new.ivypha.com/static/uploads/2023/2/14/c3e00b72dc487661cdc63f03853215aa.gif\"/>\r\n\r\n# Gesti\r\n\r\n![](https://img.shields.io/github/stars/AK1118/Gesti.svg)\r\n\r\n**目录 (Table of Contents)**\r\n\r\n- [保存](#保存)\r\n- [在 微信小程序 | uniapp 端使用](#在-微信小程序--uniapp-端使用)\r\n- [可能会遇到的问题](#可能会遇到的问题)\r\n- [示例](#示例)\r\n\t\t\t- [HTML](#html)\r\n\t\t\t- [JavaScript 或 Typescript](#javascript-或-typescript)\r\n\r\n\r\n### 安装\r\n\r\n  ```\r\n  npm install gesti\r\n  ```\r\n\r\n### 引入使用\r\n\r\n  ```\r\n  import Gesti from \"gesti\";\r\n  ```\r\n\r\n### 初始化\r\n\r\n  ```\r\n  const gesti=new Gesti();\r\n      //h5端适用，其他端请参考API自行添加\r\n  const controller=gesti.initialization({\r\n    renderContext:g,\r\n    rect:{\r\n       canvasWidth:canvas.width,\r\n       canvasHeight:canvas.height\r\n     }\r\n  });\r\n  ```\r\n\r\n### 加入文字\r\n\r\n  ```\r\n    controller.load(new TextBox('New Text'));\r\n  ```\r\n\r\n# API\r\n\r\n## Gesti\r\n\r\n| 方法名      | 返回值类型  |  所属    |    参数    |   说明   |\r\n| :----:      |   :----: | :----:   |  :----:   | :----:      | \r\n| ~~init~~      |    void      |     Gesti   |    (canvas?: HTMLCanvasElement, paint?: CanvasRenderingContext2D, rect?:rectParam)   |     初始化 Gesti 时调用，共3个可选参数。canvas 和 paint 必须二选一，且没有传入canvas时，必须传入paint 和 rect.       |\r\n| ~~setConfig~~      |    void      |     Gesti   |   (config?: GestiConfigOption)   |     修改或设置配置，修改后会自动调用GestiController.update函数       |\r\n| initialization      |    GestiController      |     Gesti   |   (options:InitializationOption)   |     初始化gesti，返回控制器       |\r\n| static mount      |    [Gesti,GestiController]      |     Gesti   |   (options:InitializationOption)   |     通过静态方法初始化gesti, 返回gesti实例和它的控制器      |\r\n| static installPlugin      |    void      |     Gesti   |   (key:PluginsKey,plugin:any)   |     安装预设插件，使用某功能时再安装对应插件      |\r\n\r\n## GestiController\r\n\r\n| 方法名      | 返回值类型              |  所属    |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |    :----:   |   :----: |\r\n| updateText  | void              |    GestiController  |       (text: string, options?:TextOptions )     |      更新被选中的文字图层的文字内容，或者文字属性   |\r\n| layerLower  | void             |      GestiController     |    -      |    图层向下移动一层    |\r\n| layerRise  | void             |      GestiController     |     -     |    图层向上移动一层    |\r\n| layerTop  | void             |      GestiController     |     -     |    图层置于最顶层    |\r\n| layerBottom  | void             |      GestiController     |    -      |    图层置于最底层    |\r\n| lock    | void             |      GestiController     |     -     |    锁定当前选中图层    |\r\n| deLock    | void             |      GestiController     |     -     |    解锁当前选中图层    |\r\n| cancel    | void             |      GestiController     |      -    |    取消当前被聚焦对象    |\r\n| cancelAll    | void             |      GestiController     |     -     |    取消所有被聚焦对象    |\r\n| down    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标\\|手指点击事件时调用    |\r\n| up    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标\\|手指抬起事件时调用    |\r\n| move    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标\\|手指移动事件时调用    |\r\n| wheel    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标滚轮事件时调用    |\r\n| addListener    | any  |   GestiController |    (listenType:\"onSelect\"\\|\"onHide\"\\|\"onCancel\",callback:ListenerCallback)     |   监听图层操作，目前支持监听选中、取消选中和隐藏    |\r\n| removeListener    | void  |   GestiController |    (listenType:GestiControllerListenerTypes,hook:ListenerCallback)     |   根据addListener返回值，移除监听函数    |\r\n| rotate    | Promise\\<void\\>  |   GestiController |    angle: number     |   旋转被选中对象,传入弧度。可传入  角度*Math.PI/180     |\r\n| upward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向上移动距离 1     |\r\n| downward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向下移动距离 1     |\r\n| leftward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向左移动距离 1     |\r\n| rightward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向右移动距离 1     |\r\n| update    | void  |   GestiController |    -    |   调用后会重绘canvas,一般在改变数据后画布未刷新时使用     |\r\n| importAll    | Promise\\<void\\>  |   GestiController |    (json: string)   |   以json形式导入对象集合 H5 |\r\n| exportAll  | Promise\\<string\\>  |   GestiController |    -   |   以json形式导出对象集合 H5    |\r\n| center   | void  |   GestiController |   (axis?: \"vertical\" \\| \"horizon\")   |  垂直居中或者水平居中，不填写参数水平垂直居中    |\r\n| cancelEvent   | void  |   GestiController |   -   |  取消Gesti自带的鼠标手指时间监听。使用该函数后需要自行调用鼠标各个事件，请参考上方  down,up,move  ,使用详情参考Demo    |\r\n| addWrite   | \tvoid  |   GestiController |   (options: {type: \"circle\" \\| \"write\" \\| \"line\" \\| \"rect\" \\| \"none\";lineWidth?: number;color?: string;isFill?: boolean;})   |  添加涂鸦功能，调用该函数且传入options.type不为\"none\"时，下一次在canvas内滑动会触发生成对应的涂鸦对象,直到再次调用该函数且options.type为\"none\"时停止    |\r\n| getViewObjectById  | Promise\\<ViewObject\\>  |   GestiController |    (id:string)   |  通过id获取ViewObject对象    |\r\n\r\n\r\n| 属性名      | 返回值类型         |  所属    |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |    :----:   |   :----: |\r\n| currentViewObject| ViewObject | GestiController | - | 获取当前选中对象|\r\n\r\n\r\n## ViewObject（重要的阅读）\r\n- 画布内的可操作对象，每一张图片对象或者文字对象或者其他都是它在画布上的映射。\r\n- 获取它的途径一般来自于创建对象，它是一个基类，其子类还有TextBox , ImageBox ,WriteViewObj\r\n\r\n\r\n| 方法名      |   返回值         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|getBaseInfo | Object |   -    |    获取对象的向量信息      |\r\n|setName | void |  (name: string)    |    给对象设置名字      |\r\n|lock | void |  -   |    锁住它，不让他被操作      |\r\n|unLock | void |  -   |    解锁      |\r\n|hide  | void |  -   |    隐藏它，不是删除，删除我还没实现      |\r\n|show  | void |  -   |    显示      |\r\n|installButton  | void | (button: Button)   |   Gesti内不是没有按钮，是需要自己new过后安装     |\r\n|unInstallButton  | void | (buttons: Array<Button>)   |   卸载按钮     |\r\n|setSize  | void | (size: { width?: number; height?: number })   |   设置大小     |\r\n|setDecoration  | void | (args:any)   |  设置对象装饰，比如颜色，线条高度等，每个子类传入的参数不一     |\r\n|setOpacity  | void | (opacity:number)   |  设置对象不透明度，取值 0.0~1.0     |\r\n|toBackground  | void |  -   |  将该对象设置为背景,设置背景后可设置层级。所有事件将会被穿透   |\r\n\r\n\r\n| 属性名      |   返回值         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|rect | Rect |   -    |  获取对象大小最为合适    |\r\n|family | ViewObjectFamily |   -    |  获取对象类型,Gesti内可操作对象有多个家族，用来区分哪个对象是哪类    |\r\n|name | string |   -    |  有时候对象可以拥有一个名字    |\r\n|selected | boolean |   -    |  已经被选中了吗    |\r\n|originFamily | ViewObjectFamily |   -    |  家族起源家族，比如write是起源家族，它下面有line,rect，circle等分支家族    |\r\n|id | string |   -    |  设置该对象id    |\r\n\r\n\r\n\r\n## Button 对象\r\n- 控制ViewObject的功能按钮\r\n\r\n\r\n| 方法名      |   返回值         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|drawButton | -  |   Function(position: Vector, size: Size,radius:number, paint: Painter)    |    可重写该方法实现自定义按钮样式      |\r\n\r\n\r\n# Hooks 🚀\r\n- 还挺好用\r\n\r\n### 创建对象系列\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|createGesti | Gesti |     (config?: GestiConfigOption)    |    创建一个Gesti实例      |\r\n|useController | GestiController |    (target?: Gesti)    |  得到一个Gesti实例的控制器    |\r\n\r\n### 监听系列\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|onSelected  |   -    |    (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    选中对象时回调      |\r\n|onHover | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    是的，就像CSS3的Hover一样      |\r\n|onLeave | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    离开对象时调用      |\r\n|onCancel | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    取消选中时      |\r\n|onHide | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    隐藏可操作对象时      |\r\n|onUpdate | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    刷新画布时      |\r\n|onLoad | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    载入新的对象到画布内时      |\r\n|onBeforeDestroy  | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    销毁Gesti实例前执行      |\r\n|onDestroy| - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    销毁Gesti实例后执行      |\r\n|removeListener | - | (type: GestiControllerListenerTypes,hook: (_args: any) => any, target?: Gesti)    |    根据addListener返回值，移除监听函数    |\r\n\r\n\r\n\r\n\r\n\r\n### 添加预设系列\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|addVerticalLine | Promise\\<ViewObject> |    -     |    新增预设垂直线到画布内      |\r\n|addHorizonLine | Promise\\<ViewObject> |    -     |    新增预设水平线到画布内      |\r\n|addRect | Promise\\<ViewObject> |    -     |    新增预设矩形到画布内      |\r\n|addCircle | Promise\\<ViewObject> |    -     |    新增预设圆形到画布内      |\r\n\r\n\r\n### 创建ViewObject可操作对象系列\r\n- 自己创建的对象，用着放心\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|createTextBox | TextBox |   (text: string, options?: TextOptions)     |    创建一个文本对象      |\r\n|createXImage | XImage |   (option: {data,width:number,height:number})  |    创建一个XImage对象，注意，这个并不是你所看到的那个图片，可以理解为它是图片源，渲染由下面这个类做到      |\r\n|createImageBox | ImageBox |   (xImage: XImage)     |    创建一个图片对象      |\r\n|createDragButton | Button | (view: ViewObject)    |    创建一个拖拽按钮      |\r\n|createHorizonButton | Button | (view: ViewObject)    |    创建一个水平拖拽按钮      |\r\n|createVerticalButton | Button | (view: ViewObject)    |    创建一个垂直拖拽按钮      |\r\n|createRotateButton | Button | (view: ViewObject)    |    创建一个旋转按钮      |\r\n|createLockButton | Button | (view: ViewObject)    |    创建一个上锁按钮      |\r\n|createUnlockButton | Button | (view: ViewObject)    |    创建一个解锁按钮      |\r\n|createMirrorButton  | Button | (view: ViewObject)    |    创建一个镜像翻转按钮      |\r\n|createCloseButton  | Button | (view: ViewObject)    |    创建一个关闭按钮      |\r\n|installButton | - | (view: ViewObject, button: Button \\| Array<Button>)    |    安装按钮到ViewObject上      |\r\n|unInstallButton | - | (view: ViewObject, button: Button \\| Array<Button>)   |    卸载ViewObject上的按钮   |\r\n|loadToGesti | - |    (view: ViewObject, target?: Gesti)    |   加入一个ViewObject对象到画布内,以上的类都是继承于ViewObjet      |\r\n\r\n\r\n\r\n### use系列\r\n- 涂鸦功能\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|useGraffitiRect | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，矩形     |\r\n|useGraffitiCircle | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，圆形     |\r\n|useGraffitiLine | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，线条     |\r\n|useGraffitiWrite | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，手写板     |\r\n|useCloseGraffiti | - |    (option?: {...}, target?: Gesti    | 关闭涂鸦功能    |\r\n|useTextHandler | - |    (option?: {...}, target?: Gesti    | 得到一个TextBox实例控制器，用于控制它的参数    |\r\n|~~useReader~~ | Promise<ViewObject> |    (json: string)    | 传入特定格式的json，返回一个ViewObject对象    |\r\n|useReaderH5 | Promise<ViewObject> |    (json: string)    | 传入特定格式的json，返回一个ViewObject对象  H5    |\r\n|useReaderWeChat | Promise<ViewObject> |    (json: string)    | 传入特定格式的json，返回一个ViewObject对象 微信小程序 canvas 2d   |\r\n|useGetViewObject | Promise<ViewObject> |    (id: string)    |  通过id获取ViewObject对象    |\r\n\r\n\r\n### do系列\r\n- 需要做一些操作? 交给它们\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|doSelect | - |    (view?: ViewObject, target?: Gesti)    |  选中传入对象  |\r\n|doRotate | - |     (angle: number, existing?: boolean, view?: ViewObject, target?: Gesti)    |  旋转一个对象，不传入view默认当前选中对象  |\r\n|doPosition | - |     (x: number, x: number, view?: ViewObject, target?: Gesti)    |  设置一个对象的位置，不传入view默认当前选中对象  |\r\n|doCleanAll | - |    (view?: ViewObject, target?: Gesti)    |  画布内清空所有元素  |\r\n|doLayerLower | - |    (view?: ViewObject, target?: Gesti)    |  所在图层向下一层  |\r\n|doLayerRise | - |    (view?: ViewObject, target?: Gesti)    |  所在图层向上一层  |\r\n|doLayerTop | - |    (view?: ViewObject, target?: Gesti)    |  置于顶层  |\r\n|doLayerBottom | - |    (view?: ViewObject, target?: Gesti)    |  置于底层  |\r\n|doLock | - |    (view?: ViewObject, target?: Gesti)    |  锁住对象  |\r\n|doUnLock | - |    (view?: ViewObject, target?: Gesti)    |  解锁对象  |\r\n|doUpward | - |    (view?: ViewObject, target?: Gesti)    |  位置微调，上一个单位  |\r\n|doDownward | - |    (view?: ViewObject, target?: Gesti)    |  位置微调，下一个单位 |\r\n|doLeftward | - |    (view?: ViewObject, target?: Gesti)    |   位置微调，左一个单位  |\r\n|doRightward | - |    (view?: ViewObject, target?: Gesti)    |  位置微调，右一个单位  |\r\n|doCenter | - |   (view?: ViewObject, axis?: CenterAxis, target?: Gesti)    |  居中，可选水平或者垂直，不填就垂直水平居中  |\r\n|doCancel | - |    (view?: ViewObject, target?: Gesti)    |  取消选中单个/现在被选中的对象  |\r\n|doCancelAll | - |    -    |  取消所有被选中对象  |\r\n|doUpdate | - |    -    |  手动刷新画布  |\r\n|doCancelEvent | - |    -    |  取消原有画布事件代理,调用该方法后需要自定调用drive系列Hook,否则Gesti无法监听到您的手指/鼠标的位置  |\r\n\r\n\r\n### drive系列\r\n- 自定义鼠标/手指事件代理\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|driveMove | - |   (e:Event)    |  鼠标/手指移动时  |\r\n|driveUp | - |   (e:Event)    |  鼠标/手指抬起时  |\r\n|driveDown | - |   (e:Event)    |  鼠标/手指放下时  |\r\n|driveWheel | - |   (e:Event)    |  鼠标滚轮时  |\r\n\r\n\r\n### 尺寸适配\r\n- 物理单位转换像素  此处dpi取96   \r\n- 值得注意:Gesti内没有一个标准的单位，所有的单位都由您决定，比如画布创建设置大小时，图片创建传入时，字体设置大小时。总之，您输入多大，Gesti就为您显示多大（比如输入图片高宽为物理单位一厘米，那么在Gesti内您所看到的图片大小也会是一厘米高宽）\r\n- 以下提供的方法仅供参考，如需更精准的方案您可以自己实现。\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|mmToIn       | number          |   (mm:number)    |  毫米转换为英寸  |\r\n|inToPx       |number            |  (inch:number)    | 英寸转换为像素  |\r\n|ptToPx       | number             |   (pt:number)    | 英榜转换为像素（一般设置字体时用它）  |\r\n\r\n\r\n\r\n\r\n# 保存\r\n\r\n- 该库只是为您提供了canvas的代理操作，并没有改变canvas的任何原有API，所以您可以使用canvas自带的API进行存储。\r\n\r\n# 可能会遇到的问题\r\n- 图片导入不出现？数据变了图片没动？试试update方法刷新一下。\r\n- hooks和普通模式有啥区别吗? 个人认为Hooks更适合FP爱好者，普通模式适合OOP爱好者。\r\n- 图片 | 文字上没有可以直接操作的按钮吗？ 有,不过需要您自己new成按钮对象安装上去。\r\n- 为什么路由切换后再返回页面会发生报错？重新init一下，记得controller也要重新赋值。\r\n- 其他问题可以加下面QQ群\r\n- Demo下载地址:  https://ext.dcloud.net.cn/plugin?id=10867 \r\n\r\n# 示例\r\n\r\n***用它，没有多麻烦。***\r\n\r\n####  HTML\r\n\r\n\t<canvas id=\"canvas\" width=\"300\" height=\"300\"></canvas>\r\n\r\n#### JavaScript\r\n\r\n    const canvas = document.querySelector(\"canvas\");\r\n    const renderContext= canvas.getContext(\"2d\");\r\n    const [gesti,controller]=Gesti.mount({\r\n        renderContext,\r\n        rect:{\r\n          canvasWidth:canvas.width,\r\n          canvasHeight:canvas.height\r\n        }\r\n    });\r\n    controller.load(new Text(`New Text.\r\n      新建文本`))\r\n\r\n\r\n\r\n***不是吗？***\r\n\r\n\r\n### 需要帮助？\r\n\r\n- 添加QQ群聊(Gesti交流群),我们讨论一下问题  756829516 ","readmeFilename":"README.md","gitHead":"7e6e41ae1e4932c36240f0d1feec50474666dbf4","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_nodeVersion":"20.9.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-KMic0fYpq40x1wiau0t1VcBCDL4G3RhDaZA4GnPexLRwnNMrNiNqGswzHHaLYsJwjTj5fAesOGQGicUMoaClxg==","shasum":"fbf1b2de4c463dc127d6cfde2d7a78a28ec7b0d2","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.3.98.tgz","fileCount":14,"unpackedSize":706763,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICYgDBmz6HcNopJoUD0UBKF6K2QZnvIUShHu4H0UFQIXAiBT1t4GqqhlriewZS2GrkJMJnbZn3pKrydSSwJihlGaLw=="}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.3.98_1711952536486_0.9930525188272081"},"_hasShrinkwrap":false},"1.3.99":{"name":"gesti","version":"1.3.99","description":"一个运行飞快的前端Canvas贴图工具","main":"./dist/index.js","types":"./dist/types/index.d.ts","type":"module","scripts":{"build":"rollup --config rollup.config.js","test":"rollup --config rollup.config.js && node --loader ts-node/esm --inspect ./testGesti.ts","dev":"webpack-dev-server --config webpack.config.js --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"default":"./index.js","import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/types/index.d.ts"}},"keywords":["图片贴图","图文编辑","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑","React Sticker","Vue Sticker"],"author":{"name":"AK1118"},"license":"MIT","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-terser":"^0.4.3","@rollup/plugin-typescript":"^11.0.0","@types/webpack":"^5.28.4","clean-webpack-plugin":"^4.0.0","glob":"^10.3.10","html-webpack-plugin":"^5.5.0","pako":"^2.1.0","rollup":"^3.17.3","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-copy":"^3.5.0","ts-loader":"^9.4.2","ts-node":"^10.9.1","tsconfig-paths":"^4.2.0","typescript":"^4.9.5","vconsole":"^3.15.1","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.15.1"},"_id":"gesti@1.3.99","readme":"### 主要特性\r\n\r\n- Typescript开发，JavaScript,TypeScript都支持\r\n- 支持 ESM & AMD ,支持 TS\r\n- 基于原生Canvas，兼容主流浏览器，PC端以及移动端,兼容微信小程序，Uniapp App 端。\r\n- 极简操作，更多功能，持续更新。\r\n\r\n# 效果图\r\n\r\n<img src=\"https://new.ivypha.com/static/uploads/2023/2/14/c3e00b72dc487661cdc63f03853215aa.gif\"/>\r\n\r\n# Gesti\r\n\r\n![](https://img.shields.io/github/stars/AK1118/Gesti.svg)\r\n\r\n**目录 (Table of Contents)**\r\n\r\n- [保存](#保存)\r\n- [在 微信小程序 | uniapp 端使用](#在-微信小程序--uniapp-端使用)\r\n- [可能会遇到的问题](#可能会遇到的问题)\r\n- [示例](#示例)\r\n\t\t\t- [HTML](#html)\r\n\t\t\t- [JavaScript 或 Typescript](#javascript-或-typescript)\r\n\r\n\r\n### 安装\r\n\r\n  ```\r\n  npm install gesti\r\n  ```\r\n\r\n### 引入使用\r\n\r\n  ```\r\n  import Gesti from \"gesti\";\r\n  ```\r\n\r\n### 初始化\r\n\r\n  ```\r\n  const gesti=new Gesti();\r\n      //h5端适用，其他端请参考API自行添加\r\n  const controller=gesti.initialization({\r\n    renderContext:g,\r\n    rect:{\r\n       canvasWidth:canvas.width,\r\n       canvasHeight:canvas.height\r\n     }\r\n  });\r\n  ```\r\n\r\n### 加入文字\r\n\r\n  ```\r\n    controller.load(new TextBox('New Text'));\r\n  ```\r\n\r\n# API\r\n\r\n## Gesti\r\n\r\n| 方法名      | 返回值类型  |  所属    |    参数    |   说明   |\r\n| :----:      |   :----: | :----:   |  :----:   | :----:      | \r\n| ~~init~~      |    void      |     Gesti   |    (canvas?: HTMLCanvasElement, paint?: CanvasRenderingContext2D, rect?:rectParam)   |     初始化 Gesti 时调用，共3个可选参数。canvas 和 paint 必须二选一，且没有传入canvas时，必须传入paint 和 rect.       |\r\n| ~~setConfig~~      |    void      |     Gesti   |   (config?: GestiConfigOption)   |     修改或设置配置，修改后会自动调用GestiController.update函数       |\r\n| initialization      |    GestiController      |     Gesti   |   (options:InitializationOption)   |     初始化gesti，返回控制器       |\r\n| static mount      |    [Gesti,GestiController]      |     Gesti   |   (options:InitializationOption)   |     通过静态方法初始化gesti, 返回gesti实例和它的控制器      |\r\n| static installPlugin      |    void      |     Gesti   |   (key:PluginsKey,plugin:any)   |     安装预设插件，使用某功能时再安装对应插件      |\r\n\r\n## GestiController\r\n\r\n| 方法名      | 返回值类型              |  所属    |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |    :----:   |   :----: |\r\n| updateText  | void              |    GestiController  |       (text: string, options?:TextOptions )     |      更新被选中的文字图层的文字内容，或者文字属性   |\r\n| layerLower  | void             |      GestiController     |    -      |    图层向下移动一层    |\r\n| layerRise  | void             |      GestiController     |     -     |    图层向上移动一层    |\r\n| layerTop  | void             |      GestiController     |     -     |    图层置于最顶层    |\r\n| layerBottom  | void             |      GestiController     |    -      |    图层置于最底层    |\r\n| lock    | void             |      GestiController     |     -     |    锁定当前选中图层    |\r\n| deLock    | void             |      GestiController     |     -     |    解锁当前选中图层    |\r\n| cancel    | void             |      GestiController     |      -    |    取消当前被聚焦对象    |\r\n| cancelAll    | void             |      GestiController     |     -     |    取消所有被聚焦对象    |\r\n| down    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标\\|手指点击事件时调用    |\r\n| up    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标\\|手指抬起事件时调用    |\r\n| move    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标\\|手指移动事件时调用    |\r\n| wheel    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标滚轮事件时调用    |\r\n| addListener    | any  |   GestiController |    (listenType:\"onSelect\"\\|\"onHide\"\\|\"onCancel\",callback:ListenerCallback)     |   监听图层操作，目前支持监听选中、取消选中和隐藏    |\r\n| removeListener    | void  |   GestiController |    (listenType:GestiControllerListenerTypes,hook:ListenerCallback)     |   根据addListener返回值，移除监听函数    |\r\n| rotate    | Promise\\<void\\>  |   GestiController |    angle: number     |   旋转被选中对象,传入弧度。可传入  角度*Math.PI/180     |\r\n| upward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向上移动距离 1     |\r\n| downward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向下移动距离 1     |\r\n| leftward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向左移动距离 1     |\r\n| rightward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向右移动距离 1     |\r\n| update    | void  |   GestiController |    -    |   调用后会重绘canvas,一般在改变数据后画布未刷新时使用     |\r\n| importAll    | Promise\\<void\\>  |   GestiController |    (json: string)   |   以json形式导入对象集合 H5 |\r\n| exportAll  | Promise\\<string\\>  |   GestiController |    -   |   以json形式导出对象集合 H5    |\r\n| center   | void  |   GestiController |   (axis?: \"vertical\" \\| \"horizon\")   |  垂直居中或者水平居中，不填写参数水平垂直居中    |\r\n| cancelEvent   | void  |   GestiController |   -   |  取消Gesti自带的鼠标手指时间监听。使用该函数后需要自行调用鼠标各个事件，请参考上方  down,up,move  ,使用详情参考Demo    |\r\n| addWrite   | \tvoid  |   GestiController |   (options: {type: \"circle\" \\| \"write\" \\| \"line\" \\| \"rect\" \\| \"none\";lineWidth?: number;color?: string;isFill?: boolean;})   |  添加涂鸦功能，调用该函数且传入options.type不为\"none\"时，下一次在canvas内滑动会触发生成对应的涂鸦对象,直到再次调用该函数且options.type为\"none\"时停止    |\r\n| getViewObjectById  | Promise\\<ViewObject\\>  |   GestiController |    (id:string)   |  通过id获取ViewObject对象    |\r\n\r\n\r\n| 属性名      | 返回值类型         |  所属    |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |    :----:   |   :----: |\r\n| currentViewObject| ViewObject | GestiController | - | 获取当前选中对象|\r\n\r\n\r\n## ViewObject（重要的阅读）\r\n- 画布内的可操作对象，每一张图片对象或者文字对象或者其他都是它在画布上的映射。\r\n- 获取它的途径一般来自于创建对象，它是一个基类，其子类还有TextBox , ImageBox ,WriteViewObj\r\n\r\n\r\n| 方法名      |   返回值         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|getBaseInfo | Object |   -    |    获取对象的向量信息      |\r\n|setName | void |  (name: string)    |    给对象设置名字      |\r\n|lock | void |  -   |    锁住它，不让他被操作      |\r\n|unLock | void |  -   |    解锁      |\r\n|hide  | void |  -   |    隐藏它，不是删除，删除我还没实现      |\r\n|show  | void |  -   |    显示      |\r\n|installButton  | void | (button: Button)   |   Gesti内不是没有按钮，是需要自己new过后安装     |\r\n|unInstallButton  | void | (buttons: Array<Button>)   |   卸载按钮     |\r\n|setSize  | void | (size: { width?: number; height?: number })   |   设置大小     |\r\n|setDecoration  | void | (args:any)   |  设置对象装饰，比如颜色，线条高度等，每个子类传入的参数不一     |\r\n|setOpacity  | void | (opacity:number)   |  设置对象不透明度，取值 0.0~1.0     |\r\n|toBackground  | void |  -   |  将该对象设置为背景,设置背景后可设置层级。所有事件将会被穿透   |\r\n\r\n\r\n| 属性名      |   返回值         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|rect | Rect |   -    |  获取对象大小最为合适    |\r\n|family | ViewObjectFamily |   -    |  获取对象类型,Gesti内可操作对象有多个家族，用来区分哪个对象是哪类    |\r\n|name | string |   -    |  有时候对象可以拥有一个名字    |\r\n|selected | boolean |   -    |  已经被选中了吗    |\r\n|originFamily | ViewObjectFamily |   -    |  家族起源家族，比如write是起源家族，它下面有line,rect，circle等分支家族    |\r\n|id | string |   -    |  设置该对象id    |\r\n\r\n\r\n\r\n## Button 对象\r\n- 控制ViewObject的功能按钮\r\n\r\n\r\n| 方法名      |   返回值         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|drawButton | -  |   Function(position: Vector, size: Size,radius:number, paint: Painter)    |    可重写该方法实现自定义按钮样式      |\r\n\r\n\r\n# Hooks 🚀\r\n- 还挺好用\r\n\r\n### 创建对象系列\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|createGesti | Gesti |     (config?: GestiConfigOption)    |    创建一个Gesti实例      |\r\n|useController | GestiController |    (target?: Gesti)    |  得到一个Gesti实例的控制器    |\r\n\r\n### 监听系列\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|onSelected  |   -    |    (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    选中对象时回调      |\r\n|onHover | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    是的，就像CSS3的Hover一样      |\r\n|onLeave | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    离开对象时调用      |\r\n|onCancel | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    取消选中时      |\r\n|onHide | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    隐藏可操作对象时      |\r\n|onUpdate | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    刷新画布时      |\r\n|onLoad | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    载入新的对象到画布内时      |\r\n|onBeforeDestroy  | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    销毁Gesti实例前执行      |\r\n|onDestroy| - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    销毁Gesti实例后执行      |\r\n|removeListener | - | (type: GestiControllerListenerTypes,hook: (_args: any) => any, target?: Gesti)    |    根据addListener返回值，移除监听函数    |\r\n\r\n\r\n\r\n\r\n\r\n### 添加预设系列\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|addVerticalLine | Promise\\<ViewObject> |    -     |    新增预设垂直线到画布内      |\r\n|addHorizonLine | Promise\\<ViewObject> |    -     |    新增预设水平线到画布内      |\r\n|addRect | Promise\\<ViewObject> |    -     |    新增预设矩形到画布内      |\r\n|addCircle | Promise\\<ViewObject> |    -     |    新增预设圆形到画布内      |\r\n\r\n\r\n### 创建ViewObject可操作对象系列\r\n- 自己创建的对象，用着放心\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|createTextBox | TextBox |   (text: string, options?: TextOptions)     |    创建一个文本对象      |\r\n|createXImage | XImage |   (option: {data,width:number,height:number})  |    创建一个XImage对象，注意，这个并不是你所看到的那个图片，可以理解为它是图片源，渲染由下面这个类做到      |\r\n|createImageBox | ImageBox |   (xImage: XImage)     |    创建一个图片对象      |\r\n|createDragButton | Button | (view: ViewObject)    |    创建一个拖拽按钮      |\r\n|createHorizonButton | Button | (view: ViewObject)    |    创建一个水平拖拽按钮      |\r\n|createVerticalButton | Button | (view: ViewObject)    |    创建一个垂直拖拽按钮      |\r\n|createRotateButton | Button | (view: ViewObject)    |    创建一个旋转按钮      |\r\n|createLockButton | Button | (view: ViewObject)    |    创建一个上锁按钮      |\r\n|createUnlockButton | Button | (view: ViewObject)    |    创建一个解锁按钮      |\r\n|createMirrorButton  | Button | (view: ViewObject)    |    创建一个镜像翻转按钮      |\r\n|createCloseButton  | Button | (view: ViewObject)    |    创建一个关闭按钮      |\r\n|installButton | - | (view: ViewObject, button: Button \\| Array<Button>)    |    安装按钮到ViewObject上      |\r\n|unInstallButton | - | (view: ViewObject, button: Button \\| Array<Button>)   |    卸载ViewObject上的按钮   |\r\n|loadToGesti | - |    (view: ViewObject, target?: Gesti)    |   加入一个ViewObject对象到画布内,以上的类都是继承于ViewObjet      |\r\n\r\n\r\n\r\n### use系列\r\n- 涂鸦功能\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|useGraffitiRect | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，矩形     |\r\n|useGraffitiCircle | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，圆形     |\r\n|useGraffitiLine | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，线条     |\r\n|useGraffitiWrite | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，手写板     |\r\n|useCloseGraffiti | - |    (option?: {...}, target?: Gesti    | 关闭涂鸦功能    |\r\n|useTextHandler | - |    (option?: {...}, target?: Gesti    | 得到一个TextBox实例控制器，用于控制它的参数    |\r\n|~~useReader~~ | Promise<ViewObject> |    (json: string)    | 传入特定格式的json，返回一个ViewObject对象    |\r\n|useReaderH5 | Promise<ViewObject> |    (json: string)    | 传入特定格式的json，返回一个ViewObject对象  H5    |\r\n|useReaderWeChat | Promise<ViewObject> |    (json: string)    | 传入特定格式的json，返回一个ViewObject对象 微信小程序 canvas 2d   |\r\n|useGetViewObject | Promise<ViewObject> |    (id: string)    |  通过id获取ViewObject对象    |\r\n\r\n\r\n### do系列\r\n- 需要做一些操作? 交给它们\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|doSelect | - |    (view?: ViewObject, target?: Gesti)    |  选中传入对象  |\r\n|doRotate | - |     (angle: number, existing?: boolean, view?: ViewObject, target?: Gesti)    |  旋转一个对象，不传入view默认当前选中对象  |\r\n|doPosition | - |     (x: number, x: number, view?: ViewObject, target?: Gesti)    |  设置一个对象的位置，不传入view默认当前选中对象  |\r\n|doCleanAll | - |    (view?: ViewObject, target?: Gesti)    |  画布内清空所有元素  |\r\n|doLayerLower | - |    (view?: ViewObject, target?: Gesti)    |  所在图层向下一层  |\r\n|doLayerRise | - |    (view?: ViewObject, target?: Gesti)    |  所在图层向上一层  |\r\n|doLayerTop | - |    (view?: ViewObject, target?: Gesti)    |  置于顶层  |\r\n|doLayerBottom | - |    (view?: ViewObject, target?: Gesti)    |  置于底层  |\r\n|doLock | - |    (view?: ViewObject, target?: Gesti)    |  锁住对象  |\r\n|doUnLock | - |    (view?: ViewObject, target?: Gesti)    |  解锁对象  |\r\n|doUpward | - |    (view?: ViewObject, target?: Gesti)    |  位置微调，上一个单位  |\r\n|doDownward | - |    (view?: ViewObject, target?: Gesti)    |  位置微调，下一个单位 |\r\n|doLeftward | - |    (view?: ViewObject, target?: Gesti)    |   位置微调，左一个单位  |\r\n|doRightward | - |    (view?: ViewObject, target?: Gesti)    |  位置微调，右一个单位  |\r\n|doCenter | - |   (view?: ViewObject, axis?: CenterAxis, target?: Gesti)    |  居中，可选水平或者垂直，不填就垂直水平居中  |\r\n|doCancel | - |    (view?: ViewObject, target?: Gesti)    |  取消选中单个/现在被选中的对象  |\r\n|doCancelAll | - |    -    |  取消所有被选中对象  |\r\n|doUpdate | - |    -    |  手动刷新画布  |\r\n|doCancelEvent | - |    -    |  取消原有画布事件代理,调用该方法后需要自定调用drive系列Hook,否则Gesti无法监听到您的手指/鼠标的位置  |\r\n\r\n\r\n### drive系列\r\n- 自定义鼠标/手指事件代理\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|driveMove | - |   (e:Event)    |  鼠标/手指移动时  |\r\n|driveUp | - |   (e:Event)    |  鼠标/手指抬起时  |\r\n|driveDown | - |   (e:Event)    |  鼠标/手指放下时  |\r\n|driveWheel | - |   (e:Event)    |  鼠标滚轮时  |\r\n\r\n\r\n### 尺寸适配\r\n- 物理单位转换像素  此处dpi取96   \r\n- 值得注意:Gesti内没有一个标准的单位，所有的单位都由您决定，比如画布创建设置大小时，图片创建传入时，字体设置大小时。总之，您输入多大，Gesti就为您显示多大（比如输入图片高宽为物理单位一厘米，那么在Gesti内您所看到的图片大小也会是一厘米高宽）\r\n- 以下提供的方法仅供参考，如需更精准的方案您可以自己实现。\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|mmToIn       | number          |   (mm:number)    |  毫米转换为英寸  |\r\n|inToPx       |number            |  (inch:number)    | 英寸转换为像素  |\r\n|ptToPx       | number             |   (pt:number)    | 英榜转换为像素（一般设置字体时用它）  |\r\n\r\n\r\n\r\n\r\n# 保存\r\n\r\n- 该库只是为您提供了canvas的代理操作，并没有改变canvas的任何原有API，所以您可以使用canvas自带的API进行存储。\r\n\r\n# 可能会遇到的问题\r\n- 图片导入不出现？数据变了图片没动？试试update方法刷新一下。\r\n- hooks和普通模式有啥区别吗? 个人认为Hooks更适合FP爱好者，普通模式适合OOP爱好者。\r\n- 图片 | 文字上没有可以直接操作的按钮吗？ 有,不过需要您自己new成按钮对象安装上去。\r\n- 为什么路由切换后再返回页面会发生报错？重新init一下，记得controller也要重新赋值。\r\n- 其他问题可以加下面QQ群\r\n- Demo下载地址:  https://ext.dcloud.net.cn/plugin?id=10867 \r\n\r\n# 示例\r\n\r\n***用它，没有多麻烦。***\r\n\r\n####  HTML\r\n\r\n\t<canvas id=\"canvas\" width=\"300\" height=\"300\"></canvas>\r\n\r\n#### JavaScript\r\n\r\n    const canvas = document.querySelector(\"canvas\");\r\n    const renderContext= canvas.getContext(\"2d\");\r\n    const [gesti,controller]=Gesti.mount({\r\n        renderContext,\r\n        rect:{\r\n          canvasWidth:canvas.width,\r\n          canvasHeight:canvas.height\r\n        }\r\n    });\r\n    controller.load(new Text(`New Text.\r\n      新建文本`))\r\n\r\n\r\n\r\n***不是吗？***\r\n\r\n\r\n### 需要帮助？\r\n\r\n- 添加QQ群聊(Gesti交流群),我们讨论一下问题  756829516 ","readmeFilename":"README.md","gitHead":"7e6e41ae1e4932c36240f0d1feec50474666dbf4","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_nodeVersion":"20.9.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-wYHaF3vSkv4mwmWN+xtNl8R2qU5TskB3ucx40DDPh1ByBwnGsDFUV8XB6eSaIPb5LxyeCI8lIt4D66HLEjkceQ==","shasum":"7a09dfffbfee2f374d9a003d6909bdf9f24df01d","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.3.99.tgz","fileCount":14,"unpackedSize":706763,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCYNql/nWSVJge7kgyrShX4L/oXjzRUsIUTHf0ek15ZmgIhAK4Kl1rH3DiQT2l0NJtb/yTL7kwrtZ8m1MLk3qxXP43B"}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.3.99_1711952786637_0.6978010373401584"},"_hasShrinkwrap":false},"1.4.1":{"name":"gesti","version":"1.4.1","description":"一个运行飞快的前端Canvas贴图工具","main":"index.js","types":"./dist/types/index.d.ts","type":"module","scripts":{"build":"rollup --config rollup.config.js","test":"rollup --config rollup.config.js && node --loader ts-node/esm --inspect ./testGesti.ts","dev":"webpack-dev-server --config webpack.config.js --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/types/index.d.ts","default":"./index.js"}},"keywords":["图片贴图","图文编辑","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑","React Sticker","Vue Sticker"],"author":{"name":"AK1118"},"license":"MIT","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-terser":"^0.4.3","@rollup/plugin-typescript":"^11.0.0","@types/webpack":"^5.28.4","clean-webpack-plugin":"^4.0.0","glob":"^10.3.10","html-webpack-plugin":"^5.5.0","pako":"^2.1.0","rollup":"^3.17.3","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-copy":"^3.5.0","ts-loader":"^9.4.2","ts-node":"^10.9.1","tsconfig-paths":"^4.2.0","typescript":"^4.9.5","vconsole":"^3.15.1","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.15.1"},"_id":"gesti@1.4.1","readme":"### 主要特性\r\n\r\n- Typescript开发，JavaScript,TypeScript都支持\r\n- 支持 ESM & AMD ,支持 TS\r\n- 基于原生Canvas，兼容主流浏览器，PC端以及移动端,兼容微信小程序，Uniapp App 端。\r\n- 极简操作，更多功能，持续更新。\r\n\r\n# 效果图\r\n\r\n<img src=\"https://new.ivypha.com/static/uploads/2023/2/14/c3e00b72dc487661cdc63f03853215aa.gif\"/>\r\n\r\n# Gesti\r\n\r\n![](https://img.shields.io/github/stars/AK1118/Gesti.svg)\r\n\r\n**目录 (Table of Contents)**\r\n\r\n- [保存](#保存)\r\n- [在 微信小程序 | uniapp 端使用](#在-微信小程序--uniapp-端使用)\r\n- [可能会遇到的问题](#可能会遇到的问题)\r\n- [示例](#示例)\r\n\t\t\t- [HTML](#html)\r\n\t\t\t- [JavaScript 或 Typescript](#javascript-或-typescript)\r\n\r\n\r\n### 安装\r\n\r\n  ```\r\n  npm install gesti\r\n  ```\r\n\r\n### 引入使用\r\n\r\n  ```\r\n  import Gesti from \"gesti\";\r\n  ```\r\n\r\n### 初始化\r\n\r\n  ```\r\n  const gesti=new Gesti();\r\n      //h5端适用，其他端请参考API自行添加\r\n  const controller=gesti.initialization({\r\n    renderContext:g,\r\n    rect:{\r\n       canvasWidth:canvas.width,\r\n       canvasHeight:canvas.height\r\n     }\r\n  });\r\n  ```\r\n\r\n### 加入文字\r\n\r\n  ```\r\n    controller.load(new TextBox('New Text'));\r\n  ```\r\n\r\n# API\r\n\r\n## Gesti\r\n\r\n| 方法名      | 返回值类型  |  所属    |    参数    |   说明   |\r\n| :----:      |   :----: | :----:   |  :----:   | :----:      | \r\n| ~~init~~      |    void      |     Gesti   |    (canvas?: HTMLCanvasElement, paint?: CanvasRenderingContext2D, rect?:rectParam)   |     初始化 Gesti 时调用，共3个可选参数。canvas 和 paint 必须二选一，且没有传入canvas时，必须传入paint 和 rect.       |\r\n| ~~setConfig~~      |    void      |     Gesti   |   (config?: GestiConfigOption)   |     修改或设置配置，修改后会自动调用GestiController.update函数       |\r\n| initialization      |    GestiController      |     Gesti   |   (options:InitializationOption)   |     初始化gesti，返回控制器       |\r\n| static mount      |    [Gesti,GestiController]      |     Gesti   |   (options:InitializationOption)   |     通过静态方法初始化gesti, 返回gesti实例和它的控制器      |\r\n| static installPlugin      |    void      |     Gesti   |   (key:PluginsKey,plugin:any)   |     安装预设插件，使用某功能时再安装对应插件      |\r\n\r\n## GestiController\r\n\r\n| 方法名      | 返回值类型              |  所属    |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |    :----:   |   :----: |\r\n| updateText  | void              |    GestiController  |       (text: string, options?:TextOptions )     |      更新被选中的文字图层的文字内容，或者文字属性   |\r\n| layerLower  | void             |      GestiController     |    -      |    图层向下移动一层    |\r\n| layerRise  | void             |      GestiController     |     -     |    图层向上移动一层    |\r\n| layerTop  | void             |      GestiController     |     -     |    图层置于最顶层    |\r\n| layerBottom  | void             |      GestiController     |    -      |    图层置于最底层    |\r\n| lock    | void             |      GestiController     |     -     |    锁定当前选中图层    |\r\n| deLock    | void             |      GestiController     |     -     |    解锁当前选中图层    |\r\n| cancel    | void             |      GestiController     |      -    |    取消当前被聚焦对象    |\r\n| cancelAll    | void             |      GestiController     |     -     |    取消所有被聚焦对象    |\r\n| down    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标\\|手指点击事件时调用    |\r\n| up    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标\\|手指抬起事件时调用    |\r\n| move    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标\\|手指移动事件时调用    |\r\n| wheel    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标滚轮事件时调用    |\r\n| addListener    | any  |   GestiController |    (listenType:\"onSelect\"\\|\"onHide\"\\|\"onCancel\",callback:ListenerCallback)     |   监听图层操作，目前支持监听选中、取消选中和隐藏    |\r\n| removeListener    | void  |   GestiController |    (listenType:GestiControllerListenerTypes,hook:ListenerCallback)     |   根据addListener返回值，移除监听函数    |\r\n| rotate    | Promise\\<void\\>  |   GestiController |    angle: number     |   旋转被选中对象,传入弧度。可传入  角度*Math.PI/180     |\r\n| upward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向上移动距离 1     |\r\n| downward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向下移动距离 1     |\r\n| leftward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向左移动距离 1     |\r\n| rightward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向右移动距离 1     |\r\n| update    | void  |   GestiController |    -    |   调用后会重绘canvas,一般在改变数据后画布未刷新时使用     |\r\n| importAll    | Promise\\<void\\>  |   GestiController |    (json: string)   |   以json形式导入对象集合 H5 |\r\n| exportAll  | Promise\\<string\\>  |   GestiController |    -   |   以json形式导出对象集合 H5    |\r\n| center   | void  |   GestiController |   (axis?: \"vertical\" \\| \"horizon\")   |  垂直居中或者水平居中，不填写参数水平垂直居中    |\r\n| cancelEvent   | void  |   GestiController |   -   |  取消Gesti自带的鼠标手指时间监听。使用该函数后需要自行调用鼠标各个事件，请参考上方  down,up,move  ,使用详情参考Demo    |\r\n| addWrite   | \tvoid  |   GestiController |   (options: {type: \"circle\" \\| \"write\" \\| \"line\" \\| \"rect\" \\| \"none\";lineWidth?: number;color?: string;isFill?: boolean;})   |  添加涂鸦功能，调用该函数且传入options.type不为\"none\"时，下一次在canvas内滑动会触发生成对应的涂鸦对象,直到再次调用该函数且options.type为\"none\"时停止    |\r\n| getViewObjectById  | Promise\\<ViewObject\\>  |   GestiController |    (id:string)   |  通过id获取ViewObject对象    |\r\n\r\n\r\n| 属性名      | 返回值类型         |  所属    |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |    :----:   |   :----: |\r\n| currentViewObject| ViewObject | GestiController | - | 获取当前选中对象|\r\n\r\n\r\n## ViewObject（重要的阅读）\r\n- 画布内的可操作对象，每一张图片对象或者文字对象或者其他都是它在画布上的映射。\r\n- 获取它的途径一般来自于创建对象，它是一个基类，其子类还有TextBox , ImageBox ,WriteViewObj\r\n\r\n\r\n| 方法名      |   返回值         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|getBaseInfo | Object |   -    |    获取对象的向量信息      |\r\n|setName | void |  (name: string)    |    给对象设置名字      |\r\n|lock | void |  -   |    锁住它，不让他被操作      |\r\n|unLock | void |  -   |    解锁      |\r\n|hide  | void |  -   |    隐藏它，不是删除，删除我还没实现      |\r\n|show  | void |  -   |    显示      |\r\n|installButton  | void | (button: Button)   |   Gesti内不是没有按钮，是需要自己new过后安装     |\r\n|unInstallButton  | void | (buttons: Array<Button>)   |   卸载按钮     |\r\n|setSize  | void | (size: { width?: number; height?: number })   |   设置大小     |\r\n|setDecoration  | void | (args:any)   |  设置对象装饰，比如颜色，线条高度等，每个子类传入的参数不一     |\r\n|setOpacity  | void | (opacity:number)   |  设置对象不透明度，取值 0.0~1.0     |\r\n|toBackground  | void |  -   |  将该对象设置为背景,设置背景后可设置层级。所有事件将会被穿透   |\r\n\r\n\r\n| 属性名      |   返回值         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|rect | Rect |   -    |  获取对象大小最为合适    |\r\n|family | ViewObjectFamily |   -    |  获取对象类型,Gesti内可操作对象有多个家族，用来区分哪个对象是哪类    |\r\n|name | string |   -    |  有时候对象可以拥有一个名字    |\r\n|selected | boolean |   -    |  已经被选中了吗    |\r\n|originFamily | ViewObjectFamily |   -    |  家族起源家族，比如write是起源家族，它下面有line,rect，circle等分支家族    |\r\n|id | string |   -    |  设置该对象id    |\r\n\r\n\r\n\r\n## Button 对象\r\n- 控制ViewObject的功能按钮\r\n\r\n\r\n| 方法名      |   返回值         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|drawButton | -  |   Function(position: Vector, size: Size,radius:number, paint: Painter)    |    可重写该方法实现自定义按钮样式      |\r\n\r\n\r\n# Hooks 🚀\r\n- 还挺好用\r\n\r\n### 创建对象系列\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|createGesti | Gesti |     (config?: GestiConfigOption)    |    创建一个Gesti实例      |\r\n|useController | GestiController |    (target?: Gesti)    |  得到一个Gesti实例的控制器    |\r\n\r\n### 监听系列\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|onSelected  |   -    |    (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    选中对象时回调      |\r\n|onHover | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    是的，就像CSS3的Hover一样      |\r\n|onLeave | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    离开对象时调用      |\r\n|onCancel | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    取消选中时      |\r\n|onHide | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    隐藏可操作对象时      |\r\n|onUpdate | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    刷新画布时      |\r\n|onLoad | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    载入新的对象到画布内时      |\r\n|onBeforeDestroy  | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    销毁Gesti实例前执行      |\r\n|onDestroy| - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    销毁Gesti实例后执行      |\r\n|removeListener | - | (type: GestiControllerListenerTypes,hook: (_args: any) => any, target?: Gesti)    |    根据addListener返回值，移除监听函数    |\r\n\r\n\r\n\r\n\r\n\r\n### 添加预设系列\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|addVerticalLine | Promise\\<ViewObject> |    -     |    新增预设垂直线到画布内      |\r\n|addHorizonLine | Promise\\<ViewObject> |    -     |    新增预设水平线到画布内      |\r\n|addRect | Promise\\<ViewObject> |    -     |    新增预设矩形到画布内      |\r\n|addCircle | Promise\\<ViewObject> |    -     |    新增预设圆形到画布内      |\r\n\r\n\r\n### 创建ViewObject可操作对象系列\r\n- 自己创建的对象，用着放心\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|createTextBox | TextBox |   (text: string, options?: TextOptions)     |    创建一个文本对象      |\r\n|createXImage | XImage |   (option: {data,width:number,height:number})  |    创建一个XImage对象，注意，这个并不是你所看到的那个图片，可以理解为它是图片源，渲染由下面这个类做到      |\r\n|createImageBox | ImageBox |   (xImage: XImage)     |    创建一个图片对象      |\r\n|createDragButton | Button | (view: ViewObject)    |    创建一个拖拽按钮      |\r\n|createHorizonButton | Button | (view: ViewObject)    |    创建一个水平拖拽按钮      |\r\n|createVerticalButton | Button | (view: ViewObject)    |    创建一个垂直拖拽按钮      |\r\n|createRotateButton | Button | (view: ViewObject)    |    创建一个旋转按钮      |\r\n|createLockButton | Button | (view: ViewObject)    |    创建一个上锁按钮      |\r\n|createUnlockButton | Button | (view: ViewObject)    |    创建一个解锁按钮      |\r\n|createMirrorButton  | Button | (view: ViewObject)    |    创建一个镜像翻转按钮      |\r\n|createCloseButton  | Button | (view: ViewObject)    |    创建一个关闭按钮      |\r\n|installButton | - | (view: ViewObject, button: Button \\| Array<Button>)    |    安装按钮到ViewObject上      |\r\n|unInstallButton | - | (view: ViewObject, button: Button \\| Array<Button>)   |    卸载ViewObject上的按钮   |\r\n|loadToGesti | - |    (view: ViewObject, target?: Gesti)    |   加入一个ViewObject对象到画布内,以上的类都是继承于ViewObjet      |\r\n\r\n\r\n\r\n### use系列\r\n- 涂鸦功能\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|useGraffitiRect | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，矩形     |\r\n|useGraffitiCircle | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，圆形     |\r\n|useGraffitiLine | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，线条     |\r\n|useGraffitiWrite | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，手写板     |\r\n|useCloseGraffiti | - |    (option?: {...}, target?: Gesti    | 关闭涂鸦功能    |\r\n|useTextHandler | - |    (option?: {...}, target?: Gesti    | 得到一个TextBox实例控制器，用于控制它的参数    |\r\n|~~useReader~~ | Promise<ViewObject> |    (json: string)    | 传入特定格式的json，返回一个ViewObject对象    |\r\n|useReaderH5 | Promise<ViewObject> |    (json: string)    | 传入特定格式的json，返回一个ViewObject对象  H5    |\r\n|useReaderWeChat | Promise<ViewObject> |    (json: string)    | 传入特定格式的json，返回一个ViewObject对象 微信小程序 canvas 2d   |\r\n|useGetViewObject | Promise<ViewObject> |    (id: string)    |  通过id获取ViewObject对象    |\r\n\r\n\r\n### do系列\r\n- 需要做一些操作? 交给它们\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|doSelect | - |    (view?: ViewObject, target?: Gesti)    |  选中传入对象  |\r\n|doRotate | - |     (angle: number, existing?: boolean, view?: ViewObject, target?: Gesti)    |  旋转一个对象，不传入view默认当前选中对象  |\r\n|doPosition | - |     (x: number, x: number, view?: ViewObject, target?: Gesti)    |  设置一个对象的位置，不传入view默认当前选中对象  |\r\n|doCleanAll | - |    (view?: ViewObject, target?: Gesti)    |  画布内清空所有元素  |\r\n|doLayerLower | - |    (view?: ViewObject, target?: Gesti)    |  所在图层向下一层  |\r\n|doLayerRise | - |    (view?: ViewObject, target?: Gesti)    |  所在图层向上一层  |\r\n|doLayerTop | - |    (view?: ViewObject, target?: Gesti)    |  置于顶层  |\r\n|doLayerBottom | - |    (view?: ViewObject, target?: Gesti)    |  置于底层  |\r\n|doLock | - |    (view?: ViewObject, target?: Gesti)    |  锁住对象  |\r\n|doUnLock | - |    (view?: ViewObject, target?: Gesti)    |  解锁对象  |\r\n|doUpward | - |    (view?: ViewObject, target?: Gesti)    |  位置微调，上一个单位  |\r\n|doDownward | - |    (view?: ViewObject, target?: Gesti)    |  位置微调，下一个单位 |\r\n|doLeftward | - |    (view?: ViewObject, target?: Gesti)    |   位置微调，左一个单位  |\r\n|doRightward | - |    (view?: ViewObject, target?: Gesti)    |  位置微调，右一个单位  |\r\n|doCenter | - |   (view?: ViewObject, axis?: CenterAxis, target?: Gesti)    |  居中，可选水平或者垂直，不填就垂直水平居中  |\r\n|doCancel | - |    (view?: ViewObject, target?: Gesti)    |  取消选中单个/现在被选中的对象  |\r\n|doCancelAll | - |    -    |  取消所有被选中对象  |\r\n|doUpdate | - |    -    |  手动刷新画布  |\r\n|doCancelEvent | - |    -    |  取消原有画布事件代理,调用该方法后需要自定调用drive系列Hook,否则Gesti无法监听到您的手指/鼠标的位置  |\r\n\r\n\r\n### drive系列\r\n- 自定义鼠标/手指事件代理\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|driveMove | - |   (e:Event)    |  鼠标/手指移动时  |\r\n|driveUp | - |   (e:Event)    |  鼠标/手指抬起时  |\r\n|driveDown | - |   (e:Event)    |  鼠标/手指放下时  |\r\n|driveWheel | - |   (e:Event)    |  鼠标滚轮时  |\r\n\r\n\r\n### 尺寸适配\r\n- 物理单位转换像素  此处dpi取96   \r\n- 值得注意:Gesti内没有一个标准的单位，所有的单位都由您决定，比如画布创建设置大小时，图片创建传入时，字体设置大小时。总之，您输入多大，Gesti就为您显示多大（比如输入图片高宽为物理单位一厘米，那么在Gesti内您所看到的图片大小也会是一厘米高宽）\r\n- 以下提供的方法仅供参考，如需更精准的方案您可以自己实现。\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|mmToIn       | number          |   (mm:number)    |  毫米转换为英寸  |\r\n|inToPx       |number            |  (inch:number)    | 英寸转换为像素  |\r\n|ptToPx       | number             |   (pt:number)    | 英榜转换为像素（一般设置字体时用它）  |\r\n\r\n\r\n\r\n\r\n# 保存\r\n\r\n- 该库只是为您提供了canvas的代理操作，并没有改变canvas的任何原有API，所以您可以使用canvas自带的API进行存储。\r\n\r\n# 可能会遇到的问题\r\n- 图片导入不出现？数据变了图片没动？试试update方法刷新一下。\r\n- hooks和普通模式有啥区别吗? 个人认为Hooks更适合FP爱好者，普通模式适合OOP爱好者。\r\n- 图片 | 文字上没有可以直接操作的按钮吗？ 有,不过需要您自己new成按钮对象安装上去。\r\n- 为什么路由切换后再返回页面会发生报错？重新init一下，记得controller也要重新赋值。\r\n- 其他问题可以加下面QQ群\r\n- Demo下载地址:  https://ext.dcloud.net.cn/plugin?id=10867 \r\n\r\n# 示例\r\n\r\n***用它，没有多麻烦。***\r\n\r\n####  HTML\r\n\r\n\t<canvas id=\"canvas\" width=\"300\" height=\"300\"></canvas>\r\n\r\n#### JavaScript\r\n\r\n    const canvas = document.querySelector(\"canvas\");\r\n    const renderContext= canvas.getContext(\"2d\");\r\n    const [gesti,controller]=Gesti.mount({\r\n        renderContext,\r\n        rect:{\r\n          canvasWidth:canvas.width,\r\n          canvasHeight:canvas.height\r\n        }\r\n    });\r\n    controller.load(new Text(`New Text.\r\n      新建文本`))\r\n\r\n\r\n\r\n***不是吗？***\r\n\r\n\r\n### 需要帮助？\r\n\r\n- 添加QQ群聊(Gesti交流群),我们讨论一下问题  756829516 ","readmeFilename":"README.md","gitHead":"7e6e41ae1e4932c36240f0d1feec50474666dbf4","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_nodeVersion":"20.9.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-cXh0DPCSyquKtrDVMyfbwTwt6sEcozwOoSfsbGVzI8U6AB18tMx0CmJRegpsBzoSnrDD6UPJnmap6f9kBtXUBw==","shasum":"2245c485c8584877a409993879fa0054b1f8660a","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.4.1.tgz","fileCount":14,"unpackedSize":706756,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCXP0Z1qcy98MLjD7xzJPE1jHkYld97+fWU2QaTX53I1gIhAIDfNPdAozDz5M/CD5IWuUQgz+cv/9OpWL+nU3TRZMM/"}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.4.1_1711955173753_0.0376336678097382"},"_hasShrinkwrap":false},"1.4.2":{"name":"gesti","version":"1.4.2","description":"一个运行飞快的前端Canvas贴图工具","main":"index.js","types":"dist/types/index.d.ts","type":"module","scripts":{"build":"rollup --config rollup.config.js","test":"rollup --config rollup.config.js && node --loader ts-node/esm --inspect ./testGesti.ts","dev":"webpack-dev-server --config webpack.config.js --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"types":"./dist/types/index.d.ts","default":"./index.js"}},"keywords":["图片贴图","图文编辑","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑","React Sticker","Vue Sticker"],"author":{"name":"AK1118"},"license":"MIT","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-terser":"^0.4.3","@rollup/plugin-typescript":"^11.0.0","@types/webpack":"^5.28.4","clean-webpack-plugin":"^4.0.0","glob":"^10.3.10","html-webpack-plugin":"^5.5.0","pako":"^2.1.0","rollup":"^3.17.3","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-copy":"^3.5.0","ts-loader":"^9.4.2","ts-node":"^10.9.1","tsconfig-paths":"^4.2.0","typescript":"^4.9.5","vconsole":"^3.15.1","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.15.1"},"_id":"gesti@1.4.2","readme":"### 主要特性\r\n\r\n- Typescript开发，JavaScript,TypeScript都支持\r\n- 支持 ESM & AMD ,支持 TS\r\n- 基于原生Canvas，兼容主流浏览器，PC端以及移动端,兼容微信小程序，Uniapp App 端。\r\n- 极简操作，更多功能，持续更新。\r\n\r\n# 效果图\r\n\r\n<img src=\"https://new.ivypha.com/static/uploads/2023/2/14/c3e00b72dc487661cdc63f03853215aa.gif\"/>\r\n\r\n# Gesti\r\n\r\n![](https://img.shields.io/github/stars/AK1118/Gesti.svg)\r\n\r\n**目录 (Table of Contents)**\r\n\r\n- [保存](#保存)\r\n- [在 微信小程序 | uniapp 端使用](#在-微信小程序--uniapp-端使用)\r\n- [可能会遇到的问题](#可能会遇到的问题)\r\n- [示例](#示例)\r\n\t\t\t- [HTML](#html)\r\n\t\t\t- [JavaScript 或 Typescript](#javascript-或-typescript)\r\n\r\n\r\n### 安装\r\n\r\n  ```\r\n  npm install gesti\r\n  ```\r\n\r\n### 引入使用\r\n\r\n  ```\r\n  import Gesti from \"gesti\";\r\n  ```\r\n\r\n### 初始化\r\n\r\n  ```\r\n  const gesti=new Gesti();\r\n      //h5端适用，其他端请参考API自行添加\r\n  const controller=gesti.initialization({\r\n    renderContext:g,\r\n    rect:{\r\n       canvasWidth:canvas.width,\r\n       canvasHeight:canvas.height\r\n     }\r\n  });\r\n  ```\r\n\r\n### 加入文字\r\n\r\n  ```\r\n    controller.load(new TextBox('New Text'));\r\n  ```\r\n\r\n# API\r\n\r\n## Gesti\r\n\r\n| 方法名      | 返回值类型  |  所属    |    参数    |   说明   |\r\n| :----:      |   :----: | :----:   |  :----:   | :----:      | \r\n| ~~init~~      |    void      |     Gesti   |    (canvas?: HTMLCanvasElement, paint?: CanvasRenderingContext2D, rect?:rectParam)   |     初始化 Gesti 时调用，共3个可选参数。canvas 和 paint 必须二选一，且没有传入canvas时，必须传入paint 和 rect.       |\r\n| ~~setConfig~~      |    void      |     Gesti   |   (config?: GestiConfigOption)   |     修改或设置配置，修改后会自动调用GestiController.update函数       |\r\n| initialization      |    GestiController      |     Gesti   |   (options:InitializationOption)   |     初始化gesti，返回控制器       |\r\n| static mount      |    [Gesti,GestiController]      |     Gesti   |   (options:InitializationOption)   |     通过静态方法初始化gesti, 返回gesti实例和它的控制器      |\r\n| static installPlugin      |    void      |     Gesti   |   (key:PluginsKey,plugin:any)   |     安装预设插件，使用某功能时再安装对应插件      |\r\n\r\n## GestiController\r\n\r\n| 方法名      | 返回值类型              |  所属    |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |    :----:   |   :----: |\r\n| updateText  | void              |    GestiController  |       (text: string, options?:TextOptions )     |      更新被选中的文字图层的文字内容，或者文字属性   |\r\n| layerLower  | void             |      GestiController     |    -      |    图层向下移动一层    |\r\n| layerRise  | void             |      GestiController     |     -     |    图层向上移动一层    |\r\n| layerTop  | void             |      GestiController     |     -     |    图层置于最顶层    |\r\n| layerBottom  | void             |      GestiController     |    -      |    图层置于最底层    |\r\n| lock    | void             |      GestiController     |     -     |    锁定当前选中图层    |\r\n| deLock    | void             |      GestiController     |     -     |    解锁当前选中图层    |\r\n| cancel    | void             |      GestiController     |      -    |    取消当前被聚焦对象    |\r\n| cancelAll    | void             |      GestiController     |     -     |    取消所有被聚焦对象    |\r\n| down    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标\\|手指点击事件时调用    |\r\n| up    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标\\|手指抬起事件时调用    |\r\n| move    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标\\|手指移动事件时调用    |\r\n| wheel    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标滚轮事件时调用    |\r\n| addListener    | any  |   GestiController |    (listenType:\"onSelect\"\\|\"onHide\"\\|\"onCancel\",callback:ListenerCallback)     |   监听图层操作，目前支持监听选中、取消选中和隐藏    |\r\n| removeListener    | void  |   GestiController |    (listenType:GestiControllerListenerTypes,hook:ListenerCallback)     |   根据addListener返回值，移除监听函数    |\r\n| rotate    | Promise\\<void\\>  |   GestiController |    angle: number     |   旋转被选中对象,传入弧度。可传入  角度*Math.PI/180     |\r\n| upward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向上移动距离 1     |\r\n| downward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向下移动距离 1     |\r\n| leftward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向左移动距离 1     |\r\n| rightward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向右移动距离 1     |\r\n| update    | void  |   GestiController |    -    |   调用后会重绘canvas,一般在改变数据后画布未刷新时使用     |\r\n| importAll    | Promise\\<void\\>  |   GestiController |    (json: string)   |   以json形式导入对象集合 H5 |\r\n| exportAll  | Promise\\<string\\>  |   GestiController |    -   |   以json形式导出对象集合 H5    |\r\n| center   | void  |   GestiController |   (axis?: \"vertical\" \\| \"horizon\")   |  垂直居中或者水平居中，不填写参数水平垂直居中    |\r\n| cancelEvent   | void  |   GestiController |   -   |  取消Gesti自带的鼠标手指时间监听。使用该函数后需要自行调用鼠标各个事件，请参考上方  down,up,move  ,使用详情参考Demo    |\r\n| addWrite   | \tvoid  |   GestiController |   (options: {type: \"circle\" \\| \"write\" \\| \"line\" \\| \"rect\" \\| \"none\";lineWidth?: number;color?: string;isFill?: boolean;})   |  添加涂鸦功能，调用该函数且传入options.type不为\"none\"时，下一次在canvas内滑动会触发生成对应的涂鸦对象,直到再次调用该函数且options.type为\"none\"时停止    |\r\n| getViewObjectById  | Promise\\<ViewObject\\>  |   GestiController |    (id:string)   |  通过id获取ViewObject对象    |\r\n\r\n\r\n| 属性名      | 返回值类型         |  所属    |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |    :----:   |   :----: |\r\n| currentViewObject| ViewObject | GestiController | - | 获取当前选中对象|\r\n\r\n\r\n## ViewObject（重要的阅读）\r\n- 画布内的可操作对象，每一张图片对象或者文字对象或者其他都是它在画布上的映射。\r\n- 获取它的途径一般来自于创建对象，它是一个基类，其子类还有TextBox , ImageBox ,WriteViewObj\r\n\r\n\r\n| 方法名      |   返回值         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|getBaseInfo | Object |   -    |    获取对象的向量信息      |\r\n|setName | void |  (name: string)    |    给对象设置名字      |\r\n|lock | void |  -   |    锁住它，不让他被操作      |\r\n|unLock | void |  -   |    解锁      |\r\n|hide  | void |  -   |    隐藏它，不是删除，删除我还没实现      |\r\n|show  | void |  -   |    显示      |\r\n|installButton  | void | (button: Button)   |   Gesti内不是没有按钮，是需要自己new过后安装     |\r\n|unInstallButton  | void | (buttons: Array<Button>)   |   卸载按钮     |\r\n|setSize  | void | (size: { width?: number; height?: number })   |   设置大小     |\r\n|setDecoration  | void | (args:any)   |  设置对象装饰，比如颜色，线条高度等，每个子类传入的参数不一     |\r\n|setOpacity  | void | (opacity:number)   |  设置对象不透明度，取值 0.0~1.0     |\r\n|toBackground  | void |  -   |  将该对象设置为背景,设置背景后可设置层级。所有事件将会被穿透   |\r\n\r\n\r\n| 属性名      |   返回值         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|rect | Rect |   -    |  获取对象大小最为合适    |\r\n|family | ViewObjectFamily |   -    |  获取对象类型,Gesti内可操作对象有多个家族，用来区分哪个对象是哪类    |\r\n|name | string |   -    |  有时候对象可以拥有一个名字    |\r\n|selected | boolean |   -    |  已经被选中了吗    |\r\n|originFamily | ViewObjectFamily |   -    |  家族起源家族，比如write是起源家族，它下面有line,rect，circle等分支家族    |\r\n|id | string |   -    |  设置该对象id    |\r\n\r\n\r\n\r\n## Button 对象\r\n- 控制ViewObject的功能按钮\r\n\r\n\r\n| 方法名      |   返回值         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|drawButton | -  |   Function(position: Vector, size: Size,radius:number, paint: Painter)    |    可重写该方法实现自定义按钮样式      |\r\n\r\n\r\n# Hooks 🚀\r\n- 还挺好用\r\n\r\n### 创建对象系列\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|createGesti | Gesti |     (config?: GestiConfigOption)    |    创建一个Gesti实例      |\r\n|useController | GestiController |    (target?: Gesti)    |  得到一个Gesti实例的控制器    |\r\n\r\n### 监听系列\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|onSelected  |   -    |    (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    选中对象时回调      |\r\n|onHover | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    是的，就像CSS3的Hover一样      |\r\n|onLeave | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    离开对象时调用      |\r\n|onCancel | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    取消选中时      |\r\n|onHide | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    隐藏可操作对象时      |\r\n|onUpdate | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    刷新画布时      |\r\n|onLoad | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    载入新的对象到画布内时      |\r\n|onBeforeDestroy  | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    销毁Gesti实例前执行      |\r\n|onDestroy| - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    销毁Gesti实例后执行      |\r\n|removeListener | - | (type: GestiControllerListenerTypes,hook: (_args: any) => any, target?: Gesti)    |    根据addListener返回值，移除监听函数    |\r\n\r\n\r\n\r\n\r\n\r\n### 添加预设系列\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|addVerticalLine | Promise\\<ViewObject> |    -     |    新增预设垂直线到画布内      |\r\n|addHorizonLine | Promise\\<ViewObject> |    -     |    新增预设水平线到画布内      |\r\n|addRect | Promise\\<ViewObject> |    -     |    新增预设矩形到画布内      |\r\n|addCircle | Promise\\<ViewObject> |    -     |    新增预设圆形到画布内      |\r\n\r\n\r\n### 创建ViewObject可操作对象系列\r\n- 自己创建的对象，用着放心\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|createTextBox | TextBox |   (text: string, options?: TextOptions)     |    创建一个文本对象      |\r\n|createXImage | XImage |   (option: {data,width:number,height:number})  |    创建一个XImage对象，注意，这个并不是你所看到的那个图片，可以理解为它是图片源，渲染由下面这个类做到      |\r\n|createImageBox | ImageBox |   (xImage: XImage)     |    创建一个图片对象      |\r\n|createDragButton | Button | (view: ViewObject)    |    创建一个拖拽按钮      |\r\n|createHorizonButton | Button | (view: ViewObject)    |    创建一个水平拖拽按钮      |\r\n|createVerticalButton | Button | (view: ViewObject)    |    创建一个垂直拖拽按钮      |\r\n|createRotateButton | Button | (view: ViewObject)    |    创建一个旋转按钮      |\r\n|createLockButton | Button | (view: ViewObject)    |    创建一个上锁按钮      |\r\n|createUnlockButton | Button | (view: ViewObject)    |    创建一个解锁按钮      |\r\n|createMirrorButton  | Button | (view: ViewObject)    |    创建一个镜像翻转按钮      |\r\n|createCloseButton  | Button | (view: ViewObject)    |    创建一个关闭按钮      |\r\n|installButton | - | (view: ViewObject, button: Button \\| Array<Button>)    |    安装按钮到ViewObject上      |\r\n|unInstallButton | - | (view: ViewObject, button: Button \\| Array<Button>)   |    卸载ViewObject上的按钮   |\r\n|loadToGesti | - |    (view: ViewObject, target?: Gesti)    |   加入一个ViewObject对象到画布内,以上的类都是继承于ViewObjet      |\r\n\r\n\r\n\r\n### use系列\r\n- 涂鸦功能\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|useGraffitiRect | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，矩形     |\r\n|useGraffitiCircle | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，圆形     |\r\n|useGraffitiLine | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，线条     |\r\n|useGraffitiWrite | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，手写板     |\r\n|useCloseGraffiti | - |    (option?: {...}, target?: Gesti    | 关闭涂鸦功能    |\r\n|useTextHandler | - |    (option?: {...}, target?: Gesti    | 得到一个TextBox实例控制器，用于控制它的参数    |\r\n|~~useReader~~ | Promise<ViewObject> |    (json: string)    | 传入特定格式的json，返回一个ViewObject对象    |\r\n|useReaderH5 | Promise<ViewObject> |    (json: string)    | 传入特定格式的json，返回一个ViewObject对象  H5    |\r\n|useReaderWeChat | Promise<ViewObject> |    (json: string)    | 传入特定格式的json，返回一个ViewObject对象 微信小程序 canvas 2d   |\r\n|useGetViewObject | Promise<ViewObject> |    (id: string)    |  通过id获取ViewObject对象    |\r\n\r\n\r\n### do系列\r\n- 需要做一些操作? 交给它们\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|doSelect | - |    (view?: ViewObject, target?: Gesti)    |  选中传入对象  |\r\n|doRotate | - |     (angle: number, existing?: boolean, view?: ViewObject, target?: Gesti)    |  旋转一个对象，不传入view默认当前选中对象  |\r\n|doPosition | - |     (x: number, x: number, view?: ViewObject, target?: Gesti)    |  设置一个对象的位置，不传入view默认当前选中对象  |\r\n|doCleanAll | - |    (view?: ViewObject, target?: Gesti)    |  画布内清空所有元素  |\r\n|doLayerLower | - |    (view?: ViewObject, target?: Gesti)    |  所在图层向下一层  |\r\n|doLayerRise | - |    (view?: ViewObject, target?: Gesti)    |  所在图层向上一层  |\r\n|doLayerTop | - |    (view?: ViewObject, target?: Gesti)    |  置于顶层  |\r\n|doLayerBottom | - |    (view?: ViewObject, target?: Gesti)    |  置于底层  |\r\n|doLock | - |    (view?: ViewObject, target?: Gesti)    |  锁住对象  |\r\n|doUnLock | - |    (view?: ViewObject, target?: Gesti)    |  解锁对象  |\r\n|doUpward | - |    (view?: ViewObject, target?: Gesti)    |  位置微调，上一个单位  |\r\n|doDownward | - |    (view?: ViewObject, target?: Gesti)    |  位置微调，下一个单位 |\r\n|doLeftward | - |    (view?: ViewObject, target?: Gesti)    |   位置微调，左一个单位  |\r\n|doRightward | - |    (view?: ViewObject, target?: Gesti)    |  位置微调，右一个单位  |\r\n|doCenter | - |   (view?: ViewObject, axis?: CenterAxis, target?: Gesti)    |  居中，可选水平或者垂直，不填就垂直水平居中  |\r\n|doCancel | - |    (view?: ViewObject, target?: Gesti)    |  取消选中单个/现在被选中的对象  |\r\n|doCancelAll | - |    -    |  取消所有被选中对象  |\r\n|doUpdate | - |    -    |  手动刷新画布  |\r\n|doCancelEvent | - |    -    |  取消原有画布事件代理,调用该方法后需要自定调用drive系列Hook,否则Gesti无法监听到您的手指/鼠标的位置  |\r\n\r\n\r\n### drive系列\r\n- 自定义鼠标/手指事件代理\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|driveMove | - |   (e:Event)    |  鼠标/手指移动时  |\r\n|driveUp | - |   (e:Event)    |  鼠标/手指抬起时  |\r\n|driveDown | - |   (e:Event)    |  鼠标/手指放下时  |\r\n|driveWheel | - |   (e:Event)    |  鼠标滚轮时  |\r\n\r\n\r\n### 尺寸适配\r\n- 物理单位转换像素  此处dpi取96   \r\n- 值得注意:Gesti内没有一个标准的单位，所有的单位都由您决定，比如画布创建设置大小时，图片创建传入时，字体设置大小时。总之，您输入多大，Gesti就为您显示多大（比如输入图片高宽为物理单位一厘米，那么在Gesti内您所看到的图片大小也会是一厘米高宽）\r\n- 以下提供的方法仅供参考，如需更精准的方案您可以自己实现。\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|mmToIn       | number          |   (mm:number)    |  毫米转换为英寸  |\r\n|inToPx       |number            |  (inch:number)    | 英寸转换为像素  |\r\n|ptToPx       | number             |   (pt:number)    | 英榜转换为像素（一般设置字体时用它）  |\r\n\r\n\r\n\r\n\r\n# 保存\r\n\r\n- 该库只是为您提供了canvas的代理操作，并没有改变canvas的任何原有API，所以您可以使用canvas自带的API进行存储。\r\n\r\n# 可能会遇到的问题\r\n- 图片导入不出现？数据变了图片没动？试试update方法刷新一下。\r\n- hooks和普通模式有啥区别吗? 个人认为Hooks更适合FP爱好者，普通模式适合OOP爱好者。\r\n- 图片 | 文字上没有可以直接操作的按钮吗？ 有,不过需要您自己new成按钮对象安装上去。\r\n- 为什么路由切换后再返回页面会发生报错？重新init一下，记得controller也要重新赋值。\r\n- 其他问题可以加下面QQ群\r\n- Demo下载地址:  https://ext.dcloud.net.cn/plugin?id=10867 \r\n\r\n# 示例\r\n\r\n***用它，没有多麻烦。***\r\n\r\n####  HTML\r\n\r\n\t<canvas id=\"canvas\" width=\"300\" height=\"300\"></canvas>\r\n\r\n#### JavaScript\r\n\r\n    const canvas = document.querySelector(\"canvas\");\r\n    const renderContext= canvas.getContext(\"2d\");\r\n    const [gesti,controller]=Gesti.mount({\r\n        renderContext,\r\n        rect:{\r\n          canvasWidth:canvas.width,\r\n          canvasHeight:canvas.height\r\n        }\r\n    });\r\n    controller.load(new Text(`New Text.\r\n      新建文本`))\r\n\r\n\r\n\r\n***不是吗？***\r\n\r\n\r\n### 需要帮助？\r\n\r\n- 添加QQ群聊(Gesti交流群),我们讨论一下问题  756829516 ","readmeFilename":"README.md","gitHead":"7e6e41ae1e4932c36240f0d1feec50474666dbf4","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_nodeVersion":"20.9.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-nfJOJH0VR9S5CNvjkfmkMS4lZu58YTzh43QaWm3wXzuDEaGSTiEUlJLGibYwulxy9E4Cg0j31KY6sFNHaA6oEg==","shasum":"0d70fb063a56464cae2de4caf9a74906cd28301a","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.4.2.tgz","fileCount":13,"unpackedSize":373193,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDkMKixe0UbCzhUu7IGbncEMCapqaQtXB5fR2i+qf3nFAiAopcpN9xLmSH2hANOtyZEE4D7EJ+zfMUVQ/clF5TrMog=="}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.4.2_1711956227014_0.017930138040327614"},"_hasShrinkwrap":false},"1.4.3":{"name":"gesti","version":"1.4.3","description":"一个运行飞快的前端Canvas贴图工具","main":"index.js","types":"dist/types/index.d.ts","type":"module","scripts":{"build":"rollup --config rollup.config.js","test":"rollup --config rollup.config.js && node --loader ts-node/esm --inspect ./testGesti.ts","dev":"webpack-dev-server --config webpack.config.js --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"types":"./dist/types/index.d.ts","default":"./index.js"}},"keywords":["图片贴图","图文编辑","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑","React Sticker","Vue Sticker"],"author":{"name":"AK1118"},"license":"MIT","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-terser":"^0.4.3","@rollup/plugin-typescript":"^11.0.0","@types/webpack":"^5.28.4","clean-webpack-plugin":"^4.0.0","glob":"^10.3.10","html-webpack-plugin":"^5.5.0","pako":"^2.1.0","rollup":"^3.17.3","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-copy":"^3.5.0","ts-loader":"^9.4.2","ts-node":"^10.9.1","tsconfig-paths":"^4.2.0","typescript":"^4.9.5","vconsole":"^3.15.1","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.15.1"},"_id":"gesti@1.4.3","readme":"### 主要特性\r\n\r\n- Typescript开发，JavaScript,TypeScript都支持\r\n- 支持 ESM & AMD ,支持 TS\r\n- 基于原生Canvas，兼容主流浏览器，PC端以及移动端,兼容微信小程序，Uniapp App 端。\r\n- 极简操作，更多功能，持续更新。\r\n\r\n# 效果图\r\n\r\n<img src=\"https://new.ivypha.com/static/uploads/2023/2/14/c3e00b72dc487661cdc63f03853215aa.gif\"/>\r\n\r\n# Gesti\r\n\r\n![](https://img.shields.io/github/stars/AK1118/Gesti.svg)\r\n\r\n**目录 (Table of Contents)**\r\n\r\n- [保存](#保存)\r\n- [在 微信小程序 | uniapp 端使用](#在-微信小程序--uniapp-端使用)\r\n- [可能会遇到的问题](#可能会遇到的问题)\r\n- [示例](#示例)\r\n\t\t\t- [HTML](#html)\r\n\t\t\t- [JavaScript 或 Typescript](#javascript-或-typescript)\r\n\r\n\r\n### 安装\r\n\r\n  ```\r\n  npm install gesti\r\n  ```\r\n\r\n### 引入使用\r\n\r\n  ```\r\n  import Gesti from \"gesti\";\r\n  ```\r\n\r\n### 初始化\r\n\r\n  ```\r\n  const gesti=new Gesti();\r\n      //h5端适用，其他端请参考API自行添加\r\n  const controller=gesti.initialization({\r\n    renderContext:g,\r\n    rect:{\r\n       canvasWidth:canvas.width,\r\n       canvasHeight:canvas.height\r\n     }\r\n  });\r\n  ```\r\n\r\n### 加入文字\r\n\r\n  ```\r\n    controller.load(new TextBox('New Text'));\r\n  ```\r\n\r\n# API\r\n\r\n## Gesti\r\n\r\n| 方法名      | 返回值类型  |  所属    |    参数    |   说明   |\r\n| :----:      |   :----: | :----:   |  :----:   | :----:      | \r\n| ~~init~~      |    void      |     Gesti   |    (canvas?: HTMLCanvasElement, paint?: CanvasRenderingContext2D, rect?:rectParam)   |     初始化 Gesti 时调用，共3个可选参数。canvas 和 paint 必须二选一，且没有传入canvas时，必须传入paint 和 rect.       |\r\n| ~~setConfig~~      |    void      |     Gesti   |   (config?: GestiConfigOption)   |     修改或设置配置，修改后会自动调用GestiController.update函数       |\r\n| initialization      |    GestiController      |     Gesti   |   (options:InitializationOption)   |     初始化gesti，返回控制器       |\r\n| static mount      |    [Gesti,GestiController]      |     Gesti   |   (options:InitializationOption)   |     通过静态方法初始化gesti, 返回gesti实例和它的控制器      |\r\n| static installPlugin      |    void      |     Gesti   |   (key:PluginsKey,plugin:any)   |     安装预设插件，使用某功能时再安装对应插件      |\r\n\r\n## GestiController\r\n\r\n| 方法名      | 返回值类型              |  所属    |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |    :----:   |   :----: |\r\n| updateText  | void              |    GestiController  |       (text: string, options?:TextOptions )     |      更新被选中的文字图层的文字内容，或者文字属性   |\r\n| layerLower  | void             |      GestiController     |    -      |    图层向下移动一层    |\r\n| layerRise  | void             |      GestiController     |     -     |    图层向上移动一层    |\r\n| layerTop  | void             |      GestiController     |     -     |    图层置于最顶层    |\r\n| layerBottom  | void             |      GestiController     |    -      |    图层置于最底层    |\r\n| lock    | void             |      GestiController     |     -     |    锁定当前选中图层    |\r\n| deLock    | void             |      GestiController     |     -     |    解锁当前选中图层    |\r\n| cancel    | void             |      GestiController     |      -    |    取消当前被聚焦对象    |\r\n| cancelAll    | void             |      GestiController     |     -     |    取消所有被聚焦对象    |\r\n| down    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标\\|手指点击事件时调用    |\r\n| up    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标\\|手指抬起事件时调用    |\r\n| move    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标\\|手指移动事件时调用    |\r\n| wheel    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标滚轮事件时调用    |\r\n| addListener    | any  |   GestiController |    (listenType:\"onSelect\"\\|\"onHide\"\\|\"onCancel\",callback:ListenerCallback)     |   监听图层操作，目前支持监听选中、取消选中和隐藏    |\r\n| removeListener    | void  |   GestiController |    (listenType:GestiControllerListenerTypes,hook:ListenerCallback)     |   根据addListener返回值，移除监听函数    |\r\n| rotate    | Promise\\<void\\>  |   GestiController |    angle: number     |   旋转被选中对象,传入弧度。可传入  角度*Math.PI/180     |\r\n| upward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向上移动距离 1     |\r\n| downward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向下移动距离 1     |\r\n| leftward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向左移动距离 1     |\r\n| rightward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向右移动距离 1     |\r\n| update    | void  |   GestiController |    -    |   调用后会重绘canvas,一般在改变数据后画布未刷新时使用     |\r\n| importAll    | Promise\\<void\\>  |   GestiController |    (json: string)   |   以json形式导入对象集合 H5 |\r\n| exportAll  | Promise\\<string\\>  |   GestiController |    -   |   以json形式导出对象集合 H5    |\r\n| center   | void  |   GestiController |   (axis?: \"vertical\" \\| \"horizon\")   |  垂直居中或者水平居中，不填写参数水平垂直居中    |\r\n| cancelEvent   | void  |   GestiController |   -   |  取消Gesti自带的鼠标手指时间监听。使用该函数后需要自行调用鼠标各个事件，请参考上方  down,up,move  ,使用详情参考Demo    |\r\n| addWrite   | \tvoid  |   GestiController |   (options: {type: \"circle\" \\| \"write\" \\| \"line\" \\| \"rect\" \\| \"none\";lineWidth?: number;color?: string;isFill?: boolean;})   |  添加涂鸦功能，调用该函数且传入options.type不为\"none\"时，下一次在canvas内滑动会触发生成对应的涂鸦对象,直到再次调用该函数且options.type为\"none\"时停止    |\r\n| getViewObjectById  | Promise\\<ViewObject\\>  |   GestiController |    (id:string)   |  通过id获取ViewObject对象    |\r\n\r\n\r\n| 属性名      | 返回值类型         |  所属    |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |    :----:   |   :----: |\r\n| currentViewObject| ViewObject | GestiController | - | 获取当前选中对象|\r\n\r\n\r\n## ViewObject（重要的阅读）\r\n- 画布内的可操作对象，每一张图片对象或者文字对象或者其他都是它在画布上的映射。\r\n- 获取它的途径一般来自于创建对象，它是一个基类，其子类还有TextBox , ImageBox ,WriteViewObj\r\n\r\n\r\n| 方法名      |   返回值         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|getBaseInfo | Object |   -    |    获取对象的向量信息      |\r\n|setName | void |  (name: string)    |    给对象设置名字      |\r\n|lock | void |  -   |    锁住它，不让他被操作      |\r\n|unLock | void |  -   |    解锁      |\r\n|hide  | void |  -   |    隐藏它，不是删除，删除我还没实现      |\r\n|show  | void |  -   |    显示      |\r\n|installButton  | void | (button: Button)   |   Gesti内不是没有按钮，是需要自己new过后安装     |\r\n|unInstallButton  | void | (buttons: Array<Button>)   |   卸载按钮     |\r\n|setSize  | void | (size: { width?: number; height?: number })   |   设置大小     |\r\n|setDecoration  | void | (args:any)   |  设置对象装饰，比如颜色，线条高度等，每个子类传入的参数不一     |\r\n|setOpacity  | void | (opacity:number)   |  设置对象不透明度，取值 0.0~1.0     |\r\n|toBackground  | void |  -   |  将该对象设置为背景,设置背景后可设置层级。所有事件将会被穿透   |\r\n\r\n\r\n| 属性名      |   返回值         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|rect | Rect |   -    |  获取对象大小最为合适    |\r\n|family | ViewObjectFamily |   -    |  获取对象类型,Gesti内可操作对象有多个家族，用来区分哪个对象是哪类    |\r\n|name | string |   -    |  有时候对象可以拥有一个名字    |\r\n|selected | boolean |   -    |  已经被选中了吗    |\r\n|originFamily | ViewObjectFamily |   -    |  家族起源家族，比如write是起源家族，它下面有line,rect，circle等分支家族    |\r\n|id | string |   -    |  设置该对象id    |\r\n\r\n\r\n\r\n## Button 对象\r\n- 控制ViewObject的功能按钮\r\n\r\n\r\n| 方法名      |   返回值         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|drawButton | -  |   Function(position: Vector, size: Size,radius:number, paint: Painter)    |    可重写该方法实现自定义按钮样式      |\r\n\r\n\r\n# Hooks 🚀\r\n- 还挺好用\r\n\r\n### 创建对象系列\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|createGesti | Gesti |     (config?: GestiConfigOption)    |    创建一个Gesti实例      |\r\n|useController | GestiController |    (target?: Gesti)    |  得到一个Gesti实例的控制器    |\r\n\r\n### 监听系列\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|onSelected  |   -    |    (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    选中对象时回调      |\r\n|onHover | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    是的，就像CSS3的Hover一样      |\r\n|onLeave | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    离开对象时调用      |\r\n|onCancel | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    取消选中时      |\r\n|onHide | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    隐藏可操作对象时      |\r\n|onUpdate | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    刷新画布时      |\r\n|onLoad | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    载入新的对象到画布内时      |\r\n|onBeforeDestroy  | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    销毁Gesti实例前执行      |\r\n|onDestroy| - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    销毁Gesti实例后执行      |\r\n|removeListener | - | (type: GestiControllerListenerTypes,hook: (_args: any) => any, target?: Gesti)    |    根据addListener返回值，移除监听函数    |\r\n\r\n\r\n\r\n\r\n\r\n### 添加预设系列\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|addVerticalLine | Promise\\<ViewObject> |    -     |    新增预设垂直线到画布内      |\r\n|addHorizonLine | Promise\\<ViewObject> |    -     |    新增预设水平线到画布内      |\r\n|addRect | Promise\\<ViewObject> |    -     |    新增预设矩形到画布内      |\r\n|addCircle | Promise\\<ViewObject> |    -     |    新增预设圆形到画布内      |\r\n\r\n\r\n### 创建ViewObject可操作对象系列\r\n- 自己创建的对象，用着放心\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|createTextBox | TextBox |   (text: string, options?: TextOptions)     |    创建一个文本对象      |\r\n|createXImage | XImage |   (option: {data,width:number,height:number})  |    创建一个XImage对象，注意，这个并不是你所看到的那个图片，可以理解为它是图片源，渲染由下面这个类做到      |\r\n|createImageBox | ImageBox |   (xImage: XImage)     |    创建一个图片对象      |\r\n|createDragButton | Button | (view: ViewObject)    |    创建一个拖拽按钮      |\r\n|createHorizonButton | Button | (view: ViewObject)    |    创建一个水平拖拽按钮      |\r\n|createVerticalButton | Button | (view: ViewObject)    |    创建一个垂直拖拽按钮      |\r\n|createRotateButton | Button | (view: ViewObject)    |    创建一个旋转按钮      |\r\n|createLockButton | Button | (view: ViewObject)    |    创建一个上锁按钮      |\r\n|createUnlockButton | Button | (view: ViewObject)    |    创建一个解锁按钮      |\r\n|createMirrorButton  | Button | (view: ViewObject)    |    创建一个镜像翻转按钮      |\r\n|createCloseButton  | Button | (view: ViewObject)    |    创建一个关闭按钮      |\r\n|installButton | - | (view: ViewObject, button: Button \\| Array<Button>)    |    安装按钮到ViewObject上      |\r\n|unInstallButton | - | (view: ViewObject, button: Button \\| Array<Button>)   |    卸载ViewObject上的按钮   |\r\n|loadToGesti | - |    (view: ViewObject, target?: Gesti)    |   加入一个ViewObject对象到画布内,以上的类都是继承于ViewObjet      |\r\n\r\n\r\n\r\n### use系列\r\n- 涂鸦功能\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|useGraffitiRect | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，矩形     |\r\n|useGraffitiCircle | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，圆形     |\r\n|useGraffitiLine | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，线条     |\r\n|useGraffitiWrite | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，手写板     |\r\n|useCloseGraffiti | - |    (option?: {...}, target?: Gesti    | 关闭涂鸦功能    |\r\n|useTextHandler | - |    (option?: {...}, target?: Gesti    | 得到一个TextBox实例控制器，用于控制它的参数    |\r\n|~~useReader~~ | Promise<ViewObject> |    (json: string)    | 传入特定格式的json，返回一个ViewObject对象    |\r\n|useReaderH5 | Promise<ViewObject> |    (json: string)    | 传入特定格式的json，返回一个ViewObject对象  H5    |\r\n|useReaderWeChat | Promise<ViewObject> |    (json: string)    | 传入特定格式的json，返回一个ViewObject对象 微信小程序 canvas 2d   |\r\n|useGetViewObject | Promise<ViewObject> |    (id: string)    |  通过id获取ViewObject对象    |\r\n\r\n\r\n### do系列\r\n- 需要做一些操作? 交给它们\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|doSelect | - |    (view?: ViewObject, target?: Gesti)    |  选中传入对象  |\r\n|doRotate | - |     (angle: number, existing?: boolean, view?: ViewObject, target?: Gesti)    |  旋转一个对象，不传入view默认当前选中对象  |\r\n|doPosition | - |     (x: number, x: number, view?: ViewObject, target?: Gesti)    |  设置一个对象的位置，不传入view默认当前选中对象  |\r\n|doCleanAll | - |    (view?: ViewObject, target?: Gesti)    |  画布内清空所有元素  |\r\n|doLayerLower | - |    (view?: ViewObject, target?: Gesti)    |  所在图层向下一层  |\r\n|doLayerRise | - |    (view?: ViewObject, target?: Gesti)    |  所在图层向上一层  |\r\n|doLayerTop | - |    (view?: ViewObject, target?: Gesti)    |  置于顶层  |\r\n|doLayerBottom | - |    (view?: ViewObject, target?: Gesti)    |  置于底层  |\r\n|doLock | - |    (view?: ViewObject, target?: Gesti)    |  锁住对象  |\r\n|doUnLock | - |    (view?: ViewObject, target?: Gesti)    |  解锁对象  |\r\n|doUpward | - |    (view?: ViewObject, target?: Gesti)    |  位置微调，上一个单位  |\r\n|doDownward | - |    (view?: ViewObject, target?: Gesti)    |  位置微调，下一个单位 |\r\n|doLeftward | - |    (view?: ViewObject, target?: Gesti)    |   位置微调，左一个单位  |\r\n|doRightward | - |    (view?: ViewObject, target?: Gesti)    |  位置微调，右一个单位  |\r\n|doCenter | - |   (view?: ViewObject, axis?: CenterAxis, target?: Gesti)    |  居中，可选水平或者垂直，不填就垂直水平居中  |\r\n|doCancel | - |    (view?: ViewObject, target?: Gesti)    |  取消选中单个/现在被选中的对象  |\r\n|doCancelAll | - |    -    |  取消所有被选中对象  |\r\n|doUpdate | - |    -    |  手动刷新画布  |\r\n|doCancelEvent | - |    -    |  取消原有画布事件代理,调用该方法后需要自定调用drive系列Hook,否则Gesti无法监听到您的手指/鼠标的位置  |\r\n\r\n\r\n### drive系列\r\n- 自定义鼠标/手指事件代理\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|driveMove | - |   (e:Event)    |  鼠标/手指移动时  |\r\n|driveUp | - |   (e:Event)    |  鼠标/手指抬起时  |\r\n|driveDown | - |   (e:Event)    |  鼠标/手指放下时  |\r\n|driveWheel | - |   (e:Event)    |  鼠标滚轮时  |\r\n\r\n\r\n### 尺寸适配\r\n- 物理单位转换像素  此处dpi取96   \r\n- 值得注意:Gesti内没有一个标准的单位，所有的单位都由您决定，比如画布创建设置大小时，图片创建传入时，字体设置大小时。总之，您输入多大，Gesti就为您显示多大（比如输入图片高宽为物理单位一厘米，那么在Gesti内您所看到的图片大小也会是一厘米高宽）\r\n- 以下提供的方法仅供参考，如需更精准的方案您可以自己实现。\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|mmToIn       | number          |   (mm:number)    |  毫米转换为英寸  |\r\n|inToPx       |number            |  (inch:number)    | 英寸转换为像素  |\r\n|ptToPx       | number             |   (pt:number)    | 英榜转换为像素（一般设置字体时用它）  |\r\n\r\n\r\n\r\n\r\n# 保存\r\n\r\n- 该库只是为您提供了canvas的代理操作，并没有改变canvas的任何原有API，所以您可以使用canvas自带的API进行存储。\r\n\r\n# 可能会遇到的问题\r\n- 图片导入不出现？数据变了图片没动？试试update方法刷新一下。\r\n- hooks和普通模式有啥区别吗? 个人认为Hooks更适合FP爱好者，普通模式适合OOP爱好者。\r\n- 图片 | 文字上没有可以直接操作的按钮吗？ 有,不过需要您自己new成按钮对象安装上去。\r\n- 为什么路由切换后再返回页面会发生报错？重新init一下，记得controller也要重新赋值。\r\n- 其他问题可以加下面QQ群\r\n- Demo下载地址:  https://ext.dcloud.net.cn/plugin?id=10867 \r\n\r\n# 示例\r\n\r\n***用它，没有多麻烦。***\r\n\r\n####  HTML\r\n\r\n\t<canvas id=\"canvas\" width=\"300\" height=\"300\"></canvas>\r\n\r\n#### JavaScript\r\n\r\n    const canvas = document.querySelector(\"canvas\");\r\n    const renderContext= canvas.getContext(\"2d\");\r\n    const [gesti,controller]=Gesti.mount({\r\n        renderContext,\r\n        rect:{\r\n          canvasWidth:canvas.width,\r\n          canvasHeight:canvas.height\r\n        }\r\n    });\r\n    controller.load(new Text(`New Text.\r\n      新建文本`))\r\n\r\n\r\n\r\n***不是吗？***\r\n\r\n\r\n### 需要帮助？\r\n\r\n- 添加QQ群聊(Gesti交流群),我们讨论一下问题  756829516 ","readmeFilename":"README.md","gitHead":"7e6e41ae1e4932c36240f0d1feec50474666dbf4","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_nodeVersion":"20.9.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-2161f+JKrDrwhqIZ0gLiHkCCybTQXsHr+D77ovbuZ2R1d9hG78K79srH5cLEm+WORrqsSL1SmFPkHgD5MJXegw==","shasum":"8499afc810348f3681ef9c79b31d0cc3d9da2b65","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.4.3.tgz","fileCount":14,"unpackedSize":707146,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCN6vG6ZyvvPXXey8hOCvqFSPinlLm1iYCDB71U+tTNMQIhAMJw1o+ZHs7Uk+9q04mE3MSVyCGtCMETD5v+wK2MSsVu"}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.4.3_1711957932520_0.2575879595358228"},"_hasShrinkwrap":false},"1.4.4":{"name":"gesti","version":"1.4.4","description":"一个运行飞快的前端Canvas贴图工具","main":"index.js","types":"dist/types/index.d.ts","type":"module","scripts":{"build":"rollup --config rollup.config.js","test":"rollup --config rollup.config.js && node --loader ts-node/esm --inspect ./testGesti.ts","dev":"webpack-dev-server --config webpack.config.js --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/types/index.d.ts","default":"./index.js"}},"keywords":["图片贴图","图文编辑","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑","React Sticker","Vue Sticker"],"author":{"name":"AK1118"},"license":"MIT","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-terser":"^0.4.3","@rollup/plugin-typescript":"^11.0.0","@types/webpack":"^5.28.4","clean-webpack-plugin":"^4.0.0","glob":"^10.3.10","html-webpack-plugin":"^5.5.0","pako":"^2.1.0","rollup":"^3.17.3","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-copy":"^3.5.0","ts-loader":"^9.4.2","ts-node":"^10.9.1","tsconfig-paths":"^4.2.0","typescript":"^4.9.5","vconsole":"^3.15.1","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.15.1"},"_id":"gesti@1.4.4","readme":"### 主要特性\r\n\r\n- Typescript开发，JavaScript,TypeScript都支持\r\n- 支持 ESM & AMD ,支持 TS\r\n- 基于原生Canvas，兼容主流浏览器，PC端以及移动端,兼容微信小程序，Uniapp App 端。\r\n- 极简操作，更多功能，持续更新。\r\n\r\n# 效果图\r\n\r\n<img src=\"https://new.ivypha.com/static/uploads/2023/2/14/c3e00b72dc487661cdc63f03853215aa.gif\"/>\r\n\r\n# Gesti\r\n\r\n![](https://img.shields.io/github/stars/AK1118/Gesti.svg)\r\n\r\n**目录 (Table of Contents)**\r\n\r\n- [保存](#保存)\r\n- [在 微信小程序 | uniapp 端使用](#在-微信小程序--uniapp-端使用)\r\n- [可能会遇到的问题](#可能会遇到的问题)\r\n- [示例](#示例)\r\n\t\t\t- [HTML](#html)\r\n\t\t\t- [JavaScript 或 Typescript](#javascript-或-typescript)\r\n\r\n\r\n### 安装\r\n\r\n  ```\r\n  npm install gesti\r\n  ```\r\n\r\n### 引入使用\r\n\r\n  ```\r\n  import Gesti from \"gesti\";\r\n  ```\r\n\r\n### 初始化\r\n\r\n  ```\r\n  const gesti=new Gesti();\r\n      //h5端适用，其他端请参考API自行添加\r\n  const controller=gesti.initialization({\r\n    renderContext:g,\r\n    rect:{\r\n       canvasWidth:canvas.width,\r\n       canvasHeight:canvas.height\r\n     }\r\n  });\r\n  ```\r\n\r\n### 加入文字\r\n\r\n  ```\r\n    controller.load(new TextBox('New Text'));\r\n  ```\r\n\r\n# API\r\n\r\n## Gesti\r\n\r\n| 方法名      | 返回值类型  |  所属    |    参数    |   说明   |\r\n| :----:      |   :----: | :----:   |  :----:   | :----:      | \r\n| ~~init~~      |    void      |     Gesti   |    (canvas?: HTMLCanvasElement, paint?: CanvasRenderingContext2D, rect?:rectParam)   |     初始化 Gesti 时调用，共3个可选参数。canvas 和 paint 必须二选一，且没有传入canvas时，必须传入paint 和 rect.       |\r\n| ~~setConfig~~      |    void      |     Gesti   |   (config?: GestiConfigOption)   |     修改或设置配置，修改后会自动调用GestiController.update函数       |\r\n| initialization      |    GestiController      |     Gesti   |   (options:InitializationOption)   |     初始化gesti，返回控制器       |\r\n| static mount      |    [Gesti,GestiController]      |     Gesti   |   (options:InitializationOption)   |     通过静态方法初始化gesti, 返回gesti实例和它的控制器      |\r\n| static installPlugin      |    void      |     Gesti   |   (key:PluginsKey,plugin:any)   |     安装预设插件，使用某功能时再安装对应插件      |\r\n\r\n## GestiController\r\n\r\n| 方法名      | 返回值类型              |  所属    |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |    :----:   |   :----: |\r\n| updateText  | void              |    GestiController  |       (text: string, options?:TextOptions )     |      更新被选中的文字图层的文字内容，或者文字属性   |\r\n| layerLower  | void             |      GestiController     |    -      |    图层向下移动一层    |\r\n| layerRise  | void             |      GestiController     |     -     |    图层向上移动一层    |\r\n| layerTop  | void             |      GestiController     |     -     |    图层置于最顶层    |\r\n| layerBottom  | void             |      GestiController     |    -      |    图层置于最底层    |\r\n| lock    | void             |      GestiController     |     -     |    锁定当前选中图层    |\r\n| deLock    | void             |      GestiController     |     -     |    解锁当前选中图层    |\r\n| cancel    | void             |      GestiController     |      -    |    取消当前被聚焦对象    |\r\n| cancelAll    | void             |      GestiController     |     -     |    取消所有被聚焦对象    |\r\n| down    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标\\|手指点击事件时调用    |\r\n| up    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标\\|手指抬起事件时调用    |\r\n| move    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标\\|手指移动事件时调用    |\r\n| wheel    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标滚轮事件时调用    |\r\n| addListener    | any  |   GestiController |    (listenType:\"onSelect\"\\|\"onHide\"\\|\"onCancel\",callback:ListenerCallback)     |   监听图层操作，目前支持监听选中、取消选中和隐藏    |\r\n| removeListener    | void  |   GestiController |    (listenType:GestiControllerListenerTypes,hook:ListenerCallback)     |   根据addListener返回值，移除监听函数    |\r\n| rotate    | Promise\\<void\\>  |   GestiController |    angle: number     |   旋转被选中对象,传入弧度。可传入  角度*Math.PI/180     |\r\n| upward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向上移动距离 1     |\r\n| downward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向下移动距离 1     |\r\n| leftward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向左移动距离 1     |\r\n| rightward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向右移动距离 1     |\r\n| update    | void  |   GestiController |    -    |   调用后会重绘canvas,一般在改变数据后画布未刷新时使用     |\r\n| importAll    | Promise\\<void\\>  |   GestiController |    (json: string)   |   以json形式导入对象集合 H5 |\r\n| exportAll  | Promise\\<string\\>  |   GestiController |    -   |   以json形式导出对象集合 H5    |\r\n| center   | void  |   GestiController |   (axis?: \"vertical\" \\| \"horizon\")   |  垂直居中或者水平居中，不填写参数水平垂直居中    |\r\n| cancelEvent   | void  |   GestiController |   -   |  取消Gesti自带的鼠标手指时间监听。使用该函数后需要自行调用鼠标各个事件，请参考上方  down,up,move  ,使用详情参考Demo    |\r\n| addWrite   | \tvoid  |   GestiController |   (options: {type: \"circle\" \\| \"write\" \\| \"line\" \\| \"rect\" \\| \"none\";lineWidth?: number;color?: string;isFill?: boolean;})   |  添加涂鸦功能，调用该函数且传入options.type不为\"none\"时，下一次在canvas内滑动会触发生成对应的涂鸦对象,直到再次调用该函数且options.type为\"none\"时停止    |\r\n| getViewObjectById  | Promise\\<ViewObject\\>  |   GestiController |    (id:string)   |  通过id获取ViewObject对象    |\r\n\r\n\r\n| 属性名      | 返回值类型         |  所属    |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |    :----:   |   :----: |\r\n| currentViewObject| ViewObject | GestiController | - | 获取当前选中对象|\r\n\r\n\r\n## ViewObject（重要的阅读）\r\n- 画布内的可操作对象，每一张图片对象或者文字对象或者其他都是它在画布上的映射。\r\n- 获取它的途径一般来自于创建对象，它是一个基类，其子类还有TextBox , ImageBox ,WriteViewObj\r\n\r\n\r\n| 方法名      |   返回值         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|getBaseInfo | Object |   -    |    获取对象的向量信息      |\r\n|setName | void |  (name: string)    |    给对象设置名字      |\r\n|lock | void |  -   |    锁住它，不让他被操作      |\r\n|unLock | void |  -   |    解锁      |\r\n|hide  | void |  -   |    隐藏它，不是删除，删除我还没实现      |\r\n|show  | void |  -   |    显示      |\r\n|installButton  | void | (button: Button)   |   Gesti内不是没有按钮，是需要自己new过后安装     |\r\n|unInstallButton  | void | (buttons: Array<Button>)   |   卸载按钮     |\r\n|setSize  | void | (size: { width?: number; height?: number })   |   设置大小     |\r\n|setDecoration  | void | (args:any)   |  设置对象装饰，比如颜色，线条高度等，每个子类传入的参数不一     |\r\n|setOpacity  | void | (opacity:number)   |  设置对象不透明度，取值 0.0~1.0     |\r\n|toBackground  | void |  -   |  将该对象设置为背景,设置背景后可设置层级。所有事件将会被穿透   |\r\n\r\n\r\n| 属性名      |   返回值         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|rect | Rect |   -    |  获取对象大小最为合适    |\r\n|family | ViewObjectFamily |   -    |  获取对象类型,Gesti内可操作对象有多个家族，用来区分哪个对象是哪类    |\r\n|name | string |   -    |  有时候对象可以拥有一个名字    |\r\n|selected | boolean |   -    |  已经被选中了吗    |\r\n|originFamily | ViewObjectFamily |   -    |  家族起源家族，比如write是起源家族，它下面有line,rect，circle等分支家族    |\r\n|id | string |   -    |  设置该对象id    |\r\n\r\n\r\n\r\n## Button 对象\r\n- 控制ViewObject的功能按钮\r\n\r\n\r\n| 方法名      |   返回值         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|drawButton | -  |   Function(position: Vector, size: Size,radius:number, paint: Painter)    |    可重写该方法实现自定义按钮样式      |\r\n\r\n\r\n# Hooks 🚀\r\n- 还挺好用\r\n\r\n### 创建对象系列\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|createGesti | Gesti |     (config?: GestiConfigOption)    |    创建一个Gesti实例      |\r\n|useController | GestiController |    (target?: Gesti)    |  得到一个Gesti实例的控制器    |\r\n\r\n### 监听系列\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|onSelected  |   -    |    (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    选中对象时回调      |\r\n|onHover | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    是的，就像CSS3的Hover一样      |\r\n|onLeave | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    离开对象时调用      |\r\n|onCancel | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    取消选中时      |\r\n|onHide | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    隐藏可操作对象时      |\r\n|onUpdate | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    刷新画布时      |\r\n|onLoad | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    载入新的对象到画布内时      |\r\n|onBeforeDestroy  | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    销毁Gesti实例前执行      |\r\n|onDestroy| - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    销毁Gesti实例后执行      |\r\n|removeListener | - | (type: GestiControllerListenerTypes,hook: (_args: any) => any, target?: Gesti)    |    根据addListener返回值，移除监听函数    |\r\n\r\n\r\n\r\n\r\n\r\n### 添加预设系列\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|addVerticalLine | Promise\\<ViewObject> |    -     |    新增预设垂直线到画布内      |\r\n|addHorizonLine | Promise\\<ViewObject> |    -     |    新增预设水平线到画布内      |\r\n|addRect | Promise\\<ViewObject> |    -     |    新增预设矩形到画布内      |\r\n|addCircle | Promise\\<ViewObject> |    -     |    新增预设圆形到画布内      |\r\n\r\n\r\n### 创建ViewObject可操作对象系列\r\n- 自己创建的对象，用着放心\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|createTextBox | TextBox |   (text: string, options?: TextOptions)     |    创建一个文本对象      |\r\n|createXImage | XImage |   (option: {data,width:number,height:number})  |    创建一个XImage对象，注意，这个并不是你所看到的那个图片，可以理解为它是图片源，渲染由下面这个类做到      |\r\n|createImageBox | ImageBox |   (xImage: XImage)     |    创建一个图片对象      |\r\n|createDragButton | Button | (view: ViewObject)    |    创建一个拖拽按钮      |\r\n|createHorizonButton | Button | (view: ViewObject)    |    创建一个水平拖拽按钮      |\r\n|createVerticalButton | Button | (view: ViewObject)    |    创建一个垂直拖拽按钮      |\r\n|createRotateButton | Button | (view: ViewObject)    |    创建一个旋转按钮      |\r\n|createLockButton | Button | (view: ViewObject)    |    创建一个上锁按钮      |\r\n|createUnlockButton | Button | (view: ViewObject)    |    创建一个解锁按钮      |\r\n|createMirrorButton  | Button | (view: ViewObject)    |    创建一个镜像翻转按钮      |\r\n|createCloseButton  | Button | (view: ViewObject)    |    创建一个关闭按钮      |\r\n|installButton | - | (view: ViewObject, button: Button \\| Array<Button>)    |    安装按钮到ViewObject上      |\r\n|unInstallButton | - | (view: ViewObject, button: Button \\| Array<Button>)   |    卸载ViewObject上的按钮   |\r\n|loadToGesti | - |    (view: ViewObject, target?: Gesti)    |   加入一个ViewObject对象到画布内,以上的类都是继承于ViewObjet      |\r\n\r\n\r\n\r\n### use系列\r\n- 涂鸦功能\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|useGraffitiRect | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，矩形     |\r\n|useGraffitiCircle | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，圆形     |\r\n|useGraffitiLine | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，线条     |\r\n|useGraffitiWrite | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，手写板     |\r\n|useCloseGraffiti | - |    (option?: {...}, target?: Gesti    | 关闭涂鸦功能    |\r\n|useTextHandler | - |    (option?: {...}, target?: Gesti    | 得到一个TextBox实例控制器，用于控制它的参数    |\r\n|~~useReader~~ | Promise<ViewObject> |    (json: string)    | 传入特定格式的json，返回一个ViewObject对象    |\r\n|useReaderH5 | Promise<ViewObject> |    (json: string)    | 传入特定格式的json，返回一个ViewObject对象  H5    |\r\n|useReaderWeChat | Promise<ViewObject> |    (json: string)    | 传入特定格式的json，返回一个ViewObject对象 微信小程序 canvas 2d   |\r\n|useGetViewObject | Promise<ViewObject> |    (id: string)    |  通过id获取ViewObject对象    |\r\n\r\n\r\n### do系列\r\n- 需要做一些操作? 交给它们\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|doSelect | - |    (view?: ViewObject, target?: Gesti)    |  选中传入对象  |\r\n|doRotate | - |     (angle: number, existing?: boolean, view?: ViewObject, target?: Gesti)    |  旋转一个对象，不传入view默认当前选中对象  |\r\n|doPosition | - |     (x: number, x: number, view?: ViewObject, target?: Gesti)    |  设置一个对象的位置，不传入view默认当前选中对象  |\r\n|doCleanAll | - |    (view?: ViewObject, target?: Gesti)    |  画布内清空所有元素  |\r\n|doLayerLower | - |    (view?: ViewObject, target?: Gesti)    |  所在图层向下一层  |\r\n|doLayerRise | - |    (view?: ViewObject, target?: Gesti)    |  所在图层向上一层  |\r\n|doLayerTop | - |    (view?: ViewObject, target?: Gesti)    |  置于顶层  |\r\n|doLayerBottom | - |    (view?: ViewObject, target?: Gesti)    |  置于底层  |\r\n|doLock | - |    (view?: ViewObject, target?: Gesti)    |  锁住对象  |\r\n|doUnLock | - |    (view?: ViewObject, target?: Gesti)    |  解锁对象  |\r\n|doUpward | - |    (view?: ViewObject, target?: Gesti)    |  位置微调，上一个单位  |\r\n|doDownward | - |    (view?: ViewObject, target?: Gesti)    |  位置微调，下一个单位 |\r\n|doLeftward | - |    (view?: ViewObject, target?: Gesti)    |   位置微调，左一个单位  |\r\n|doRightward | - |    (view?: ViewObject, target?: Gesti)    |  位置微调，右一个单位  |\r\n|doCenter | - |   (view?: ViewObject, axis?: CenterAxis, target?: Gesti)    |  居中，可选水平或者垂直，不填就垂直水平居中  |\r\n|doCancel | - |    (view?: ViewObject, target?: Gesti)    |  取消选中单个/现在被选中的对象  |\r\n|doCancelAll | - |    -    |  取消所有被选中对象  |\r\n|doUpdate | - |    -    |  手动刷新画布  |\r\n|doCancelEvent | - |    -    |  取消原有画布事件代理,调用该方法后需要自定调用drive系列Hook,否则Gesti无法监听到您的手指/鼠标的位置  |\r\n\r\n\r\n### drive系列\r\n- 自定义鼠标/手指事件代理\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|driveMove | - |   (e:Event)    |  鼠标/手指移动时  |\r\n|driveUp | - |   (e:Event)    |  鼠标/手指抬起时  |\r\n|driveDown | - |   (e:Event)    |  鼠标/手指放下时  |\r\n|driveWheel | - |   (e:Event)    |  鼠标滚轮时  |\r\n\r\n\r\n### 尺寸适配\r\n- 物理单位转换像素  此处dpi取96   \r\n- 值得注意:Gesti内没有一个标准的单位，所有的单位都由您决定，比如画布创建设置大小时，图片创建传入时，字体设置大小时。总之，您输入多大，Gesti就为您显示多大（比如输入图片高宽为物理单位一厘米，那么在Gesti内您所看到的图片大小也会是一厘米高宽）\r\n- 以下提供的方法仅供参考，如需更精准的方案您可以自己实现。\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|mmToIn       | number          |   (mm:number)    |  毫米转换为英寸  |\r\n|inToPx       |number            |  (inch:number)    | 英寸转换为像素  |\r\n|ptToPx       | number             |   (pt:number)    | 英榜转换为像素（一般设置字体时用它）  |\r\n\r\n\r\n\r\n\r\n# 保存\r\n\r\n- 该库只是为您提供了canvas的代理操作，并没有改变canvas的任何原有API，所以您可以使用canvas自带的API进行存储。\r\n\r\n# 可能会遇到的问题\r\n- 图片导入不出现？数据变了图片没动？试试update方法刷新一下。\r\n- hooks和普通模式有啥区别吗? 个人认为Hooks更适合FP爱好者，普通模式适合OOP爱好者。\r\n- 图片 | 文字上没有可以直接操作的按钮吗？ 有,不过需要您自己new成按钮对象安装上去。\r\n- 为什么路由切换后再返回页面会发生报错？重新init一下，记得controller也要重新赋值。\r\n- 其他问题可以加下面QQ群\r\n- Demo下载地址:  https://ext.dcloud.net.cn/plugin?id=10867 \r\n\r\n# 示例\r\n\r\n***用它，没有多麻烦。***\r\n\r\n####  HTML\r\n\r\n\t<canvas id=\"canvas\" width=\"300\" height=\"300\"></canvas>\r\n\r\n#### JavaScript\r\n\r\n    const canvas = document.querySelector(\"canvas\");\r\n    const renderContext= canvas.getContext(\"2d\");\r\n    const [gesti,controller]=Gesti.mount({\r\n        renderContext,\r\n        rect:{\r\n          canvasWidth:canvas.width,\r\n          canvasHeight:canvas.height\r\n        }\r\n    });\r\n    controller.load(new Text(`New Text.\r\n      新建文本`))\r\n\r\n\r\n\r\n***不是吗？***\r\n\r\n\r\n### 需要帮助？\r\n\r\n- 添加QQ群聊(Gesti交流群),我们讨论一下问题  756829516 ","readmeFilename":"README.md","gitHead":"7e6e41ae1e4932c36240f0d1feec50474666dbf4","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_nodeVersion":"20.9.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-Ka6iWQMfVoFz+1irjw/Tw0+waxVKi4w9KJk9qFw7NtTqWCstmTrbM9S2p2c20BVNX4qaT/ymC74O7G4l3fc2hQ==","shasum":"e01353a5cfe8b14323ceb62172dab7770756e204","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.4.4.tgz","fileCount":14,"unpackedSize":706767,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC7pdDSYSnmLiYJi2Cl4RKdN6KUeX6FXxLpVnEC8ZXEqgIhANHb3Xe39LgFS08uML2soWxCUMSuoYTHmXn5uWPLz+F5"}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.4.4_1711958811418_0.9662452864721758"},"_hasShrinkwrap":false},"1.4.5":{"name":"gesti","version":"1.4.5","description":"一个运行飞快的前端Canvas贴图工具","main":"index.js","types":"dist/types/index.d.ts","type":"module","scripts":{"build":"rollup --config rollup.config.js","test":"rollup --config rollup.config.js && node --loader ts-node/esm --inspect ./testGesti.ts","dev":"webpack-dev-server --config webpack.config.js --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/types/index.d.ts","default":"./index.js"}},"keywords":["图片贴图","图文编辑","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑","React Sticker","Vue Sticker"],"author":{"name":"AK1118"},"license":"MIT","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-terser":"^0.4.3","@rollup/plugin-typescript":"^11.0.0","@types/webpack":"^5.28.4","clean-webpack-plugin":"^4.0.0","glob":"^10.3.10","html-webpack-plugin":"^5.5.0","pako":"^2.1.0","rollup":"^3.17.3","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-copy":"^3.5.0","ts-loader":"^9.4.2","ts-node":"^10.9.1","tsconfig-paths":"^4.2.0","typescript":"^4.9.5","vconsole":"^3.15.1","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.15.1"},"_id":"gesti@1.4.5","readme":"### 主要特性\r\n\r\n- Typescript开发，JavaScript,TypeScript都支持\r\n- 支持 ESM & AMD ,支持 TS\r\n- 基于原生Canvas，兼容主流浏览器，PC端以及移动端,兼容微信小程序，Uniapp App 端。\r\n- 极简操作，更多功能，持续更新。\r\n\r\n# 效果图\r\n\r\n<img src=\"https://new.ivypha.com/static/uploads/2023/2/14/c3e00b72dc487661cdc63f03853215aa.gif\"/>\r\n\r\n# Gesti\r\n\r\n![](https://img.shields.io/github/stars/AK1118/Gesti.svg)\r\n\r\n**目录 (Table of Contents)**\r\n\r\n- [保存](#保存)\r\n- [在 微信小程序 | uniapp 端使用](#在-微信小程序--uniapp-端使用)\r\n- [可能会遇到的问题](#可能会遇到的问题)\r\n- [示例](#示例)\r\n\t\t\t- [HTML](#html)\r\n\t\t\t- [JavaScript 或 Typescript](#javascript-或-typescript)\r\n\r\n\r\n### 安装\r\n\r\n  ```\r\n  npm install gesti\r\n  ```\r\n\r\n### 引入使用\r\n\r\n  ```\r\n  import Gesti from \"gesti\";\r\n  ```\r\n\r\n### 初始化\r\n\r\n  ```\r\n  const gesti=new Gesti();\r\n      //h5端适用，其他端请参考API自行添加\r\n  const controller=gesti.initialization({\r\n    renderContext:g,\r\n    rect:{\r\n       canvasWidth:canvas.width,\r\n       canvasHeight:canvas.height\r\n     }\r\n  });\r\n  ```\r\n\r\n### 加入文字\r\n\r\n  ```\r\n    controller.load(new TextBox('New Text'));\r\n  ```\r\n\r\n# API\r\n\r\n## Gesti\r\n\r\n| 方法名      | 返回值类型  |  所属    |    参数    |   说明   |\r\n| :----:      |   :----: | :----:   |  :----:   | :----:      | \r\n| ~~init~~      |    void      |     Gesti   |    (canvas?: HTMLCanvasElement, paint?: CanvasRenderingContext2D, rect?:rectParam)   |     初始化 Gesti 时调用，共3个可选参数。canvas 和 paint 必须二选一，且没有传入canvas时，必须传入paint 和 rect.       |\r\n| ~~setConfig~~      |    void      |     Gesti   |   (config?: GestiConfigOption)   |     修改或设置配置，修改后会自动调用GestiController.update函数       |\r\n| initialization      |    GestiController      |     Gesti   |   (options:InitializationOption)   |     初始化gesti，返回控制器       |\r\n| static mount      |    [Gesti,GestiController]      |     Gesti   |   (options:InitializationOption)   |     通过静态方法初始化gesti, 返回gesti实例和它的控制器      |\r\n| static installPlugin      |    void      |     Gesti   |   (key:PluginsKey,plugin:any)   |     安装预设插件，使用某功能时再安装对应插件      |\r\n\r\n## GestiController\r\n\r\n| 方法名      | 返回值类型              |  所属    |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |    :----:   |   :----: |\r\n| updateText  | void              |    GestiController  |       (text: string, options?:TextOptions )     |      更新被选中的文字图层的文字内容，或者文字属性   |\r\n| layerLower  | void             |      GestiController     |    -      |    图层向下移动一层    |\r\n| layerRise  | void             |      GestiController     |     -     |    图层向上移动一层    |\r\n| layerTop  | void             |      GestiController     |     -     |    图层置于最顶层    |\r\n| layerBottom  | void             |      GestiController     |    -      |    图层置于最底层    |\r\n| lock    | void             |      GestiController     |     -     |    锁定当前选中图层    |\r\n| deLock    | void             |      GestiController     |     -     |    解锁当前选中图层    |\r\n| cancel    | void             |      GestiController     |      -    |    取消当前被聚焦对象    |\r\n| cancelAll    | void             |      GestiController     |     -     |    取消所有被聚焦对象    |\r\n| down    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标\\|手指点击事件时调用    |\r\n| up    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标\\|手指抬起事件时调用    |\r\n| move    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标\\|手指移动事件时调用    |\r\n| wheel    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标滚轮事件时调用    |\r\n| addListener    | any  |   GestiController |    (listenType:\"onSelect\"\\|\"onHide\"\\|\"onCancel\",callback:ListenerCallback)     |   监听图层操作，目前支持监听选中、取消选中和隐藏    |\r\n| removeListener    | void  |   GestiController |    (listenType:GestiControllerListenerTypes,hook:ListenerCallback)     |   根据addListener返回值，移除监听函数    |\r\n| rotate    | Promise\\<void\\>  |   GestiController |    angle: number     |   旋转被选中对象,传入弧度。可传入  角度*Math.PI/180     |\r\n| upward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向上移动距离 1     |\r\n| downward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向下移动距离 1     |\r\n| leftward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向左移动距离 1     |\r\n| rightward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向右移动距离 1     |\r\n| update    | void  |   GestiController |    -    |   调用后会重绘canvas,一般在改变数据后画布未刷新时使用     |\r\n| importAll    | Promise\\<void\\>  |   GestiController |    (json: string)   |   以json形式导入对象集合 H5 |\r\n| exportAll  | Promise\\<string\\>  |   GestiController |    -   |   以json形式导出对象集合 H5    |\r\n| center   | void  |   GestiController |   (axis?: \"vertical\" \\| \"horizon\")   |  垂直居中或者水平居中，不填写参数水平垂直居中    |\r\n| cancelEvent   | void  |   GestiController |   -   |  取消Gesti自带的鼠标手指时间监听。使用该函数后需要自行调用鼠标各个事件，请参考上方  down,up,move  ,使用详情参考Demo    |\r\n| addWrite   | \tvoid  |   GestiController |   (options: {type: \"circle\" \\| \"write\" \\| \"line\" \\| \"rect\" \\| \"none\";lineWidth?: number;color?: string;isFill?: boolean;})   |  添加涂鸦功能，调用该函数且传入options.type不为\"none\"时，下一次在canvas内滑动会触发生成对应的涂鸦对象,直到再次调用该函数且options.type为\"none\"时停止    |\r\n| getViewObjectById  | Promise\\<ViewObject\\>  |   GestiController |    (id:string)   |  通过id获取ViewObject对象    |\r\n\r\n\r\n| 属性名      | 返回值类型         |  所属    |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |    :----:   |   :----: |\r\n| currentViewObject| ViewObject | GestiController | - | 获取当前选中对象|\r\n\r\n\r\n## ViewObject（重要的阅读）\r\n- 画布内的可操作对象，每一张图片对象或者文字对象或者其他都是它在画布上的映射。\r\n- 获取它的途径一般来自于创建对象，它是一个基类，其子类还有TextBox , ImageBox ,WriteViewObj\r\n\r\n\r\n| 方法名      |   返回值         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|getBaseInfo | Object |   -    |    获取对象的向量信息      |\r\n|setName | void |  (name: string)    |    给对象设置名字      |\r\n|lock | void |  -   |    锁住它，不让他被操作      |\r\n|unLock | void |  -   |    解锁      |\r\n|hide  | void |  -   |    隐藏它，不是删除，删除我还没实现      |\r\n|show  | void |  -   |    显示      |\r\n|installButton  | void | (button: Button)   |   Gesti内不是没有按钮，是需要自己new过后安装     |\r\n|unInstallButton  | void | (buttons: Array<Button>)   |   卸载按钮     |\r\n|setSize  | void | (size: { width?: number; height?: number })   |   设置大小     |\r\n|setDecoration  | void | (args:any)   |  设置对象装饰，比如颜色，线条高度等，每个子类传入的参数不一     |\r\n|setOpacity  | void | (opacity:number)   |  设置对象不透明度，取值 0.0~1.0     |\r\n|toBackground  | void |  -   |  将该对象设置为背景,设置背景后可设置层级。所有事件将会被穿透   |\r\n\r\n\r\n| 属性名      |   返回值         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|rect | Rect |   -    |  获取对象大小最为合适    |\r\n|family | ViewObjectFamily |   -    |  获取对象类型,Gesti内可操作对象有多个家族，用来区分哪个对象是哪类    |\r\n|name | string |   -    |  有时候对象可以拥有一个名字    |\r\n|selected | boolean |   -    |  已经被选中了吗    |\r\n|originFamily | ViewObjectFamily |   -    |  家族起源家族，比如write是起源家族，它下面有line,rect，circle等分支家族    |\r\n|id | string |   -    |  设置该对象id    |\r\n\r\n\r\n\r\n## Button 对象\r\n- 控制ViewObject的功能按钮\r\n\r\n\r\n| 方法名      |   返回值         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|drawButton | -  |   Function(position: Vector, size: Size,radius:number, paint: Painter)    |    可重写该方法实现自定义按钮样式      |\r\n\r\n\r\n# Hooks 🚀\r\n- 还挺好用\r\n\r\n### 创建对象系列\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|createGesti | Gesti |     (config?: GestiConfigOption)    |    创建一个Gesti实例      |\r\n|useController | GestiController |    (target?: Gesti)    |  得到一个Gesti实例的控制器    |\r\n\r\n### 监听系列\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|onSelected  |   -    |    (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    选中对象时回调      |\r\n|onHover | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    是的，就像CSS3的Hover一样      |\r\n|onLeave | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    离开对象时调用      |\r\n|onCancel | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    取消选中时      |\r\n|onHide | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    隐藏可操作对象时      |\r\n|onUpdate | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    刷新画布时      |\r\n|onLoad | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    载入新的对象到画布内时      |\r\n|onBeforeDestroy  | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    销毁Gesti实例前执行      |\r\n|onDestroy| - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    销毁Gesti实例后执行      |\r\n|removeListener | - | (type: GestiControllerListenerTypes,hook: (_args: any) => any, target?: Gesti)    |    根据addListener返回值，移除监听函数    |\r\n\r\n\r\n\r\n\r\n\r\n### 添加预设系列\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|addVerticalLine | Promise\\<ViewObject> |    -     |    新增预设垂直线到画布内      |\r\n|addHorizonLine | Promise\\<ViewObject> |    -     |    新增预设水平线到画布内      |\r\n|addRect | Promise\\<ViewObject> |    -     |    新增预设矩形到画布内      |\r\n|addCircle | Promise\\<ViewObject> |    -     |    新增预设圆形到画布内      |\r\n\r\n\r\n### 创建ViewObject可操作对象系列\r\n- 自己创建的对象，用着放心\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|createTextBox | TextBox |   (text: string, options?: TextOptions)     |    创建一个文本对象      |\r\n|createXImage | XImage |   (option: {data,width:number,height:number})  |    创建一个XImage对象，注意，这个并不是你所看到的那个图片，可以理解为它是图片源，渲染由下面这个类做到      |\r\n|createImageBox | ImageBox |   (xImage: XImage)     |    创建一个图片对象      |\r\n|createDragButton | Button | (view: ViewObject)    |    创建一个拖拽按钮      |\r\n|createHorizonButton | Button | (view: ViewObject)    |    创建一个水平拖拽按钮      |\r\n|createVerticalButton | Button | (view: ViewObject)    |    创建一个垂直拖拽按钮      |\r\n|createRotateButton | Button | (view: ViewObject)    |    创建一个旋转按钮      |\r\n|createLockButton | Button | (view: ViewObject)    |    创建一个上锁按钮      |\r\n|createUnlockButton | Button | (view: ViewObject)    |    创建一个解锁按钮      |\r\n|createMirrorButton  | Button | (view: ViewObject)    |    创建一个镜像翻转按钮      |\r\n|createCloseButton  | Button | (view: ViewObject)    |    创建一个关闭按钮      |\r\n|installButton | - | (view: ViewObject, button: Button \\| Array<Button>)    |    安装按钮到ViewObject上      |\r\n|unInstallButton | - | (view: ViewObject, button: Button \\| Array<Button>)   |    卸载ViewObject上的按钮   |\r\n|loadToGesti | - |    (view: ViewObject, target?: Gesti)    |   加入一个ViewObject对象到画布内,以上的类都是继承于ViewObjet      |\r\n\r\n\r\n\r\n### use系列\r\n- 涂鸦功能\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|useGraffitiRect | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，矩形     |\r\n|useGraffitiCircle | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，圆形     |\r\n|useGraffitiLine | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，线条     |\r\n|useGraffitiWrite | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，手写板     |\r\n|useCloseGraffiti | - |    (option?: {...}, target?: Gesti    | 关闭涂鸦功能    |\r\n|useTextHandler | - |    (option?: {...}, target?: Gesti    | 得到一个TextBox实例控制器，用于控制它的参数    |\r\n|~~useReader~~ | Promise<ViewObject> |    (json: string)    | 传入特定格式的json，返回一个ViewObject对象    |\r\n|useReaderH5 | Promise<ViewObject> |    (json: string)    | 传入特定格式的json，返回一个ViewObject对象  H5    |\r\n|useReaderWeChat | Promise<ViewObject> |    (json: string)    | 传入特定格式的json，返回一个ViewObject对象 微信小程序 canvas 2d   |\r\n|useGetViewObject | Promise<ViewObject> |    (id: string)    |  通过id获取ViewObject对象    |\r\n\r\n\r\n### do系列\r\n- 需要做一些操作? 交给它们\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|doSelect | - |    (view?: ViewObject, target?: Gesti)    |  选中传入对象  |\r\n|doRotate | - |     (angle: number, existing?: boolean, view?: ViewObject, target?: Gesti)    |  旋转一个对象，不传入view默认当前选中对象  |\r\n|doPosition | - |     (x: number, x: number, view?: ViewObject, target?: Gesti)    |  设置一个对象的位置，不传入view默认当前选中对象  |\r\n|doCleanAll | - |    (view?: ViewObject, target?: Gesti)    |  画布内清空所有元素  |\r\n|doLayerLower | - |    (view?: ViewObject, target?: Gesti)    |  所在图层向下一层  |\r\n|doLayerRise | - |    (view?: ViewObject, target?: Gesti)    |  所在图层向上一层  |\r\n|doLayerTop | - |    (view?: ViewObject, target?: Gesti)    |  置于顶层  |\r\n|doLayerBottom | - |    (view?: ViewObject, target?: Gesti)    |  置于底层  |\r\n|doLock | - |    (view?: ViewObject, target?: Gesti)    |  锁住对象  |\r\n|doUnLock | - |    (view?: ViewObject, target?: Gesti)    |  解锁对象  |\r\n|doUpward | - |    (view?: ViewObject, target?: Gesti)    |  位置微调，上一个单位  |\r\n|doDownward | - |    (view?: ViewObject, target?: Gesti)    |  位置微调，下一个单位 |\r\n|doLeftward | - |    (view?: ViewObject, target?: Gesti)    |   位置微调，左一个单位  |\r\n|doRightward | - |    (view?: ViewObject, target?: Gesti)    |  位置微调，右一个单位  |\r\n|doCenter | - |   (view?: ViewObject, axis?: CenterAxis, target?: Gesti)    |  居中，可选水平或者垂直，不填就垂直水平居中  |\r\n|doCancel | - |    (view?: ViewObject, target?: Gesti)    |  取消选中单个/现在被选中的对象  |\r\n|doCancelAll | - |    -    |  取消所有被选中对象  |\r\n|doUpdate | - |    -    |  手动刷新画布  |\r\n|doCancelEvent | - |    -    |  取消原有画布事件代理,调用该方法后需要自定调用drive系列Hook,否则Gesti无法监听到您的手指/鼠标的位置  |\r\n\r\n\r\n### drive系列\r\n- 自定义鼠标/手指事件代理\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|driveMove | - |   (e:Event)    |  鼠标/手指移动时  |\r\n|driveUp | - |   (e:Event)    |  鼠标/手指抬起时  |\r\n|driveDown | - |   (e:Event)    |  鼠标/手指放下时  |\r\n|driveWheel | - |   (e:Event)    |  鼠标滚轮时  |\r\n\r\n\r\n### 尺寸适配\r\n- 物理单位转换像素  此处dpi取96   \r\n- 值得注意:Gesti内没有一个标准的单位，所有的单位都由您决定，比如画布创建设置大小时，图片创建传入时，字体设置大小时。总之，您输入多大，Gesti就为您显示多大（比如输入图片高宽为物理单位一厘米，那么在Gesti内您所看到的图片大小也会是一厘米高宽）\r\n- 以下提供的方法仅供参考，如需更精准的方案您可以自己实现。\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|mmToIn       | number          |   (mm:number)    |  毫米转换为英寸  |\r\n|inToPx       |number            |  (inch:number)    | 英寸转换为像素  |\r\n|ptToPx       | number             |   (pt:number)    | 英榜转换为像素（一般设置字体时用它）  |\r\n\r\n\r\n\r\n\r\n# 保存\r\n\r\n- 该库只是为您提供了canvas的代理操作，并没有改变canvas的任何原有API，所以您可以使用canvas自带的API进行存储。\r\n\r\n# 可能会遇到的问题\r\n- 图片导入不出现？数据变了图片没动？试试update方法刷新一下。\r\n- hooks和普通模式有啥区别吗? 个人认为Hooks更适合FP爱好者，普通模式适合OOP爱好者。\r\n- 图片 | 文字上没有可以直接操作的按钮吗？ 有,不过需要您自己new成按钮对象安装上去。\r\n- 为什么路由切换后再返回页面会发生报错？重新init一下，记得controller也要重新赋值。\r\n- 其他问题可以加下面QQ群\r\n- Demo下载地址:  https://ext.dcloud.net.cn/plugin?id=10867 \r\n\r\n# 示例\r\n\r\n***用它，没有多麻烦。***\r\n\r\n####  HTML\r\n\r\n\t<canvas id=\"canvas\" width=\"300\" height=\"300\"></canvas>\r\n\r\n#### JavaScript\r\n\r\n    const canvas = document.querySelector(\"canvas\");\r\n    const renderContext= canvas.getContext(\"2d\");\r\n    const [gesti,controller]=Gesti.mount({\r\n        renderContext,\r\n        rect:{\r\n          canvasWidth:canvas.width,\r\n          canvasHeight:canvas.height\r\n        }\r\n    });\r\n    controller.load(new Text(`New Text.\r\n      新建文本`))\r\n\r\n\r\n\r\n***不是吗？***\r\n\r\n\r\n### 需要帮助？\r\n\r\n- 添加QQ群聊(Gesti交流群),我们讨论一下问题  756829516 ","readmeFilename":"README.md","gitHead":"2f67ab4066e9b54b1beb4c9b07ba36e865884623","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_nodeVersion":"20.9.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-dwrXYjgBuIz5Xtzn+QS6R51sPSferQc06RgFeeakyFc+3xRj42AZGilCHVuzhyC35V8JfkiV6DU8jZS+pY7ohg==","shasum":"514a393e56076ed257ca89033e96a7dea9db7fa5","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.4.5.tgz","fileCount":4,"unpackedSize":22350,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCXudihzXNFb+qRkCP5FW4ib2vEERHn9mRbv8kAz5UDHAIgGq3RDeS1hOVlA5NF+2WQAEbBywaqH5wPY/jlUfMKxDA="}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.4.5_1713236605549_0.5309352196773638"},"_hasShrinkwrap":false},"1.4.51":{"name":"gesti","version":"1.4.51","description":"一个运行飞快的前端Canvas贴图工具","main":"index.js","types":"dist/types/index.d.ts","type":"module","scripts":{"build":"rollup --config rollup.config.js","test":"rollup --config rollup.config.js && node --loader ts-node/esm --inspect ./testGesti.ts","dev":"webpack-dev-server --config webpack.config.js --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/types/index.d.ts","default":"./index.js"}},"keywords":["图片贴图","图文编辑","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑","React Sticker","Vue Sticker"],"author":{"name":"AK1118"},"license":"MIT","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-terser":"^0.4.3","@rollup/plugin-typescript":"^11.0.0","@types/webpack":"^5.28.4","clean-webpack-plugin":"^4.0.0","glob":"^10.3.10","html-webpack-plugin":"^5.5.0","pako":"^2.1.0","rollup":"^3.17.3","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-copy":"^3.5.0","ts-loader":"^9.4.2","ts-node":"^10.9.1","tsconfig-paths":"^4.2.0","typescript":"^4.9.5","vconsole":"^3.15.1","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.15.1"},"_id":"gesti@1.4.51","readme":"### 主要特性\r\n\r\n- Typescript开发，JavaScript,TypeScript都支持\r\n- 支持 ESM & AMD ,支持 TS\r\n- 基于原生Canvas，兼容主流浏览器，PC端以及移动端,兼容微信小程序，Uniapp App 端。\r\n- 极简操作，更多功能，持续更新。\r\n\r\n# 效果图\r\n\r\n<img src=\"https://new.ivypha.com/static/uploads/2023/2/14/c3e00b72dc487661cdc63f03853215aa.gif\"/>\r\n\r\n# Gesti\r\n\r\n![](https://img.shields.io/github/stars/AK1118/Gesti.svg)\r\n\r\n**目录 (Table of Contents)**\r\n\r\n- [保存](#保存)\r\n- [在 微信小程序 | uniapp 端使用](#在-微信小程序--uniapp-端使用)\r\n- [可能会遇到的问题](#可能会遇到的问题)\r\n- [示例](#示例)\r\n\t\t\t- [HTML](#html)\r\n\t\t\t- [JavaScript 或 Typescript](#javascript-或-typescript)\r\n\r\n\r\n### 安装\r\n\r\n  ```\r\n  npm install gesti\r\n  ```\r\n\r\n### 引入使用\r\n\r\n  ```\r\n  import Gesti from \"gesti\";\r\n  ```\r\n\r\n### 初始化\r\n\r\n  ```\r\n  const gesti=new Gesti();\r\n      //h5端适用，其他端请参考API自行添加\r\n  const controller=gesti.initialization({\r\n    renderContext:g,\r\n    rect:{\r\n       canvasWidth:canvas.width,\r\n       canvasHeight:canvas.height\r\n     }\r\n  });\r\n  ```\r\n\r\n### 加入文字\r\n\r\n  ```\r\n    controller.load(new TextBox('New Text'));\r\n  ```\r\n\r\n# API\r\n\r\n## Gesti\r\n\r\n| 方法名      | 返回值类型  |  所属    |    参数    |   说明   |\r\n| :----:      |   :----: | :----:   |  :----:   | :----:      | \r\n| ~~init~~      |    void      |     Gesti   |    (canvas?: HTMLCanvasElement, paint?: CanvasRenderingContext2D, rect?:rectParam)   |     初始化 Gesti 时调用，共3个可选参数。canvas 和 paint 必须二选一，且没有传入canvas时，必须传入paint 和 rect.       |\r\n| ~~setConfig~~      |    void      |     Gesti   |   (config?: GestiConfigOption)   |     修改或设置配置，修改后会自动调用GestiController.update函数       |\r\n| initialization      |    GestiController      |     Gesti   |   (options:InitializationOption)   |     初始化gesti，返回控制器       |\r\n| static mount      |    [Gesti,GestiController]      |     Gesti   |   (options:InitializationOption)   |     通过静态方法初始化gesti, 返回gesti实例和它的控制器      |\r\n| static installPlugin      |    void      |     Gesti   |   (key:PluginsKey,plugin:any)   |     安装预设插件，使用某功能时再安装对应插件      |\r\n\r\n## GestiController\r\n\r\n| 方法名      | 返回值类型              |  所属    |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |    :----:   |   :----: |\r\n| updateText  | void              |    GestiController  |       (text: string, options?:TextOptions )     |      更新被选中的文字图层的文字内容，或者文字属性   |\r\n| layerLower  | void             |      GestiController     |    -      |    图层向下移动一层    |\r\n| layerRise  | void             |      GestiController     |     -     |    图层向上移动一层    |\r\n| layerTop  | void             |      GestiController     |     -     |    图层置于最顶层    |\r\n| layerBottom  | void             |      GestiController     |    -      |    图层置于最底层    |\r\n| lock    | void             |      GestiController     |     -     |    锁定当前选中图层    |\r\n| deLock    | void             |      GestiController     |     -     |    解锁当前选中图层    |\r\n| cancel    | void             |      GestiController     |      -    |    取消当前被聚焦对象    |\r\n| cancelAll    | void             |      GestiController     |     -     |    取消所有被聚焦对象    |\r\n| down    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标\\|手指点击事件时调用    |\r\n| up    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标\\|手指抬起事件时调用    |\r\n| move    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标\\|手指移动事件时调用    |\r\n| wheel    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标滚轮事件时调用    |\r\n| addListener    | any  |   GestiController |    (listenType:\"onSelect\"\\|\"onHide\"\\|\"onCancel\",callback:ListenerCallback)     |   监听图层操作，目前支持监听选中、取消选中和隐藏    |\r\n| removeListener    | void  |   GestiController |    (listenType:GestiControllerListenerTypes,hook:ListenerCallback)     |   根据addListener返回值，移除监听函数    |\r\n| rotate    | Promise\\<void\\>  |   GestiController |    angle: number     |   旋转被选中对象,传入弧度。可传入  角度*Math.PI/180     |\r\n| upward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向上移动距离 1     |\r\n| downward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向下移动距离 1     |\r\n| leftward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向左移动距离 1     |\r\n| rightward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向右移动距离 1     |\r\n| update    | void  |   GestiController |    -    |   调用后会重绘canvas,一般在改变数据后画布未刷新时使用     |\r\n| importAll    | Promise\\<void\\>  |   GestiController |    (json: string)   |   以json形式导入对象集合 H5 |\r\n| exportAll  | Promise\\<string\\>  |   GestiController |    -   |   以json形式导出对象集合 H5    |\r\n| center   | void  |   GestiController |   (axis?: \"vertical\" \\| \"horizon\")   |  垂直居中或者水平居中，不填写参数水平垂直居中    |\r\n| cancelEvent   | void  |   GestiController |   -   |  取消Gesti自带的鼠标手指时间监听。使用该函数后需要自行调用鼠标各个事件，请参考上方  down,up,move  ,使用详情参考Demo    |\r\n| addWrite   | \tvoid  |   GestiController |   (options: {type: \"circle\" \\| \"write\" \\| \"line\" \\| \"rect\" \\| \"none\";lineWidth?: number;color?: string;isFill?: boolean;})   |  添加涂鸦功能，调用该函数且传入options.type不为\"none\"时，下一次在canvas内滑动会触发生成对应的涂鸦对象,直到再次调用该函数且options.type为\"none\"时停止    |\r\n| getViewObjectById  | Promise\\<ViewObject\\>  |   GestiController |    (id:string)   |  通过id获取ViewObject对象    |\r\n\r\n\r\n| 属性名      | 返回值类型         |  所属    |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |    :----:   |   :----: |\r\n| currentViewObject| ViewObject | GestiController | - | 获取当前选中对象|\r\n\r\n\r\n## ViewObject（重要的阅读）\r\n- 画布内的可操作对象，每一张图片对象或者文字对象或者其他都是它在画布上的映射。\r\n- 获取它的途径一般来自于创建对象，它是一个基类，其子类还有TextBox , ImageBox ,WriteViewObj\r\n\r\n\r\n| 方法名      |   返回值         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|getBaseInfo | Object |   -    |    获取对象的向量信息      |\r\n|setName | void |  (name: string)    |    给对象设置名字      |\r\n|lock | void |  -   |    锁住它，不让他被操作      |\r\n|unLock | void |  -   |    解锁      |\r\n|hide  | void |  -   |    隐藏它，不是删除，删除我还没实现      |\r\n|show  | void |  -   |    显示      |\r\n|installButton  | void | (button: Button)   |   Gesti内不是没有按钮，是需要自己new过后安装     |\r\n|unInstallButton  | void | (buttons: Array<Button>)   |   卸载按钮     |\r\n|setSize  | void | (size: { width?: number; height?: number })   |   设置大小     |\r\n|setDecoration  | void | (args:any)   |  设置对象装饰，比如颜色，线条高度等，每个子类传入的参数不一     |\r\n|setOpacity  | void | (opacity:number)   |  设置对象不透明度，取值 0.0~1.0     |\r\n|toBackground  | void |  -   |  将该对象设置为背景,设置背景后可设置层级。所有事件将会被穿透   |\r\n\r\n\r\n| 属性名      |   返回值         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|rect | Rect |   -    |  获取对象大小最为合适    |\r\n|family | ViewObjectFamily |   -    |  获取对象类型,Gesti内可操作对象有多个家族，用来区分哪个对象是哪类    |\r\n|name | string |   -    |  有时候对象可以拥有一个名字    |\r\n|selected | boolean |   -    |  已经被选中了吗    |\r\n|originFamily | ViewObjectFamily |   -    |  家族起源家族，比如write是起源家族，它下面有line,rect，circle等分支家族    |\r\n|id | string |   -    |  设置该对象id    |\r\n\r\n\r\n\r\n## Button 对象\r\n- 控制ViewObject的功能按钮\r\n\r\n\r\n| 方法名      |   返回值         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|drawButton | -  |   Function(position: Vector, size: Size,radius:number, paint: Painter)    |    可重写该方法实现自定义按钮样式      |\r\n\r\n\r\n# Hooks 🚀\r\n- 还挺好用\r\n\r\n### 创建对象系列\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|createGesti | Gesti |     (config?: GestiConfigOption)    |    创建一个Gesti实例      |\r\n|useController | GestiController |    (target?: Gesti)    |  得到一个Gesti实例的控制器    |\r\n\r\n### 监听系列\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|onSelected  |   -    |    (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    选中对象时回调      |\r\n|onHover | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    是的，就像CSS3的Hover一样      |\r\n|onLeave | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    离开对象时调用      |\r\n|onCancel | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    取消选中时      |\r\n|onHide | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    隐藏可操作对象时      |\r\n|onUpdate | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    刷新画布时      |\r\n|onLoad | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    载入新的对象到画布内时      |\r\n|onBeforeDestroy  | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    销毁Gesti实例前执行      |\r\n|onDestroy| - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    销毁Gesti实例后执行      |\r\n|removeListener | - | (type: GestiControllerListenerTypes,hook: (_args: any) => any, target?: Gesti)    |    根据addListener返回值，移除监听函数    |\r\n\r\n\r\n\r\n\r\n\r\n### 添加预设系列\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|addVerticalLine | Promise\\<ViewObject> |    -     |    新增预设垂直线到画布内      |\r\n|addHorizonLine | Promise\\<ViewObject> |    -     |    新增预设水平线到画布内      |\r\n|addRect | Promise\\<ViewObject> |    -     |    新增预设矩形到画布内      |\r\n|addCircle | Promise\\<ViewObject> |    -     |    新增预设圆形到画布内      |\r\n\r\n\r\n### 创建ViewObject可操作对象系列\r\n- 自己创建的对象，用着放心\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|createTextBox | TextBox |   (text: string, options?: TextOptions)     |    创建一个文本对象      |\r\n|createXImage | XImage |   (option: {data,width:number,height:number})  |    创建一个XImage对象，注意，这个并不是你所看到的那个图片，可以理解为它是图片源，渲染由下面这个类做到      |\r\n|createImageBox | ImageBox |   (xImage: XImage)     |    创建一个图片对象      |\r\n|createDragButton | Button | (view: ViewObject)    |    创建一个拖拽按钮      |\r\n|createHorizonButton | Button | (view: ViewObject)    |    创建一个水平拖拽按钮      |\r\n|createVerticalButton | Button | (view: ViewObject)    |    创建一个垂直拖拽按钮      |\r\n|createRotateButton | Button | (view: ViewObject)    |    创建一个旋转按钮      |\r\n|createLockButton | Button | (view: ViewObject)    |    创建一个上锁按钮      |\r\n|createUnlockButton | Button | (view: ViewObject)    |    创建一个解锁按钮      |\r\n|createMirrorButton  | Button | (view: ViewObject)    |    创建一个镜像翻转按钮      |\r\n|createCloseButton  | Button | (view: ViewObject)    |    创建一个关闭按钮      |\r\n|installButton | - | (view: ViewObject, button: Button \\| Array<Button>)    |    安装按钮到ViewObject上      |\r\n|unInstallButton | - | (view: ViewObject, button: Button \\| Array<Button>)   |    卸载ViewObject上的按钮   |\r\n|loadToGesti | - |    (view: ViewObject, target?: Gesti)    |   加入一个ViewObject对象到画布内,以上的类都是继承于ViewObjet      |\r\n\r\n\r\n\r\n### use系列\r\n- 涂鸦功能\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|useGraffitiRect | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，矩形     |\r\n|useGraffitiCircle | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，圆形     |\r\n|useGraffitiLine | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，线条     |\r\n|useGraffitiWrite | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，手写板     |\r\n|useCloseGraffiti | - |    (option?: {...}, target?: Gesti    | 关闭涂鸦功能    |\r\n|useTextHandler | - |    (option?: {...}, target?: Gesti    | 得到一个TextBox实例控制器，用于控制它的参数    |\r\n|~~useReader~~ | Promise<ViewObject> |    (json: string)    | 传入特定格式的json，返回一个ViewObject对象    |\r\n|useReaderH5 | Promise<ViewObject> |    (json: string)    | 传入特定格式的json，返回一个ViewObject对象  H5    |\r\n|useReaderWeChat | Promise<ViewObject> |    (json: string)    | 传入特定格式的json，返回一个ViewObject对象 微信小程序 canvas 2d   |\r\n|useGetViewObject | Promise<ViewObject> |    (id: string)    |  通过id获取ViewObject对象    |\r\n\r\n\r\n### do系列\r\n- 需要做一些操作? 交给它们\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|doSelect | - |    (view?: ViewObject, target?: Gesti)    |  选中传入对象  |\r\n|doRotate | - |     (angle: number, existing?: boolean, view?: ViewObject, target?: Gesti)    |  旋转一个对象，不传入view默认当前选中对象  |\r\n|doPosition | - |     (x: number, x: number, view?: ViewObject, target?: Gesti)    |  设置一个对象的位置，不传入view默认当前选中对象  |\r\n|doCleanAll | - |    (view?: ViewObject, target?: Gesti)    |  画布内清空所有元素  |\r\n|doLayerLower | - |    (view?: ViewObject, target?: Gesti)    |  所在图层向下一层  |\r\n|doLayerRise | - |    (view?: ViewObject, target?: Gesti)    |  所在图层向上一层  |\r\n|doLayerTop | - |    (view?: ViewObject, target?: Gesti)    |  置于顶层  |\r\n|doLayerBottom | - |    (view?: ViewObject, target?: Gesti)    |  置于底层  |\r\n|doLock | - |    (view?: ViewObject, target?: Gesti)    |  锁住对象  |\r\n|doUnLock | - |    (view?: ViewObject, target?: Gesti)    |  解锁对象  |\r\n|doUpward | - |    (view?: ViewObject, target?: Gesti)    |  位置微调，上一个单位  |\r\n|doDownward | - |    (view?: ViewObject, target?: Gesti)    |  位置微调，下一个单位 |\r\n|doLeftward | - |    (view?: ViewObject, target?: Gesti)    |   位置微调，左一个单位  |\r\n|doRightward | - |    (view?: ViewObject, target?: Gesti)    |  位置微调，右一个单位  |\r\n|doCenter | - |   (view?: ViewObject, axis?: CenterAxis, target?: Gesti)    |  居中，可选水平或者垂直，不填就垂直水平居中  |\r\n|doCancel | - |    (view?: ViewObject, target?: Gesti)    |  取消选中单个/现在被选中的对象  |\r\n|doCancelAll | - |    -    |  取消所有被选中对象  |\r\n|doUpdate | - |    -    |  手动刷新画布  |\r\n|doCancelEvent | - |    -    |  取消原有画布事件代理,调用该方法后需要自定调用drive系列Hook,否则Gesti无法监听到您的手指/鼠标的位置  |\r\n\r\n\r\n### drive系列\r\n- 自定义鼠标/手指事件代理\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|driveMove | - |   (e:Event)    |  鼠标/手指移动时  |\r\n|driveUp | - |   (e:Event)    |  鼠标/手指抬起时  |\r\n|driveDown | - |   (e:Event)    |  鼠标/手指放下时  |\r\n|driveWheel | - |   (e:Event)    |  鼠标滚轮时  |\r\n\r\n\r\n### 尺寸适配\r\n- 物理单位转换像素  此处dpi取96   \r\n- 值得注意:Gesti内没有一个标准的单位，所有的单位都由您决定，比如画布创建设置大小时，图片创建传入时，字体设置大小时。总之，您输入多大，Gesti就为您显示多大（比如输入图片高宽为物理单位一厘米，那么在Gesti内您所看到的图片大小也会是一厘米高宽）\r\n- 以下提供的方法仅供参考，如需更精准的方案您可以自己实现。\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|mmToIn       | number          |   (mm:number)    |  毫米转换为英寸  |\r\n|inToPx       |number            |  (inch:number)    | 英寸转换为像素  |\r\n|ptToPx       | number             |   (pt:number)    | 英榜转换为像素（一般设置字体时用它）  |\r\n\r\n\r\n\r\n\r\n# 保存\r\n\r\n- 该库只是为您提供了canvas的代理操作，并没有改变canvas的任何原有API，所以您可以使用canvas自带的API进行存储。\r\n\r\n# 可能会遇到的问题\r\n- 图片导入不出现？数据变了图片没动？试试update方法刷新一下。\r\n- hooks和普通模式有啥区别吗? 个人认为Hooks更适合FP爱好者，普通模式适合OOP爱好者。\r\n- 图片 | 文字上没有可以直接操作的按钮吗？ 有,不过需要您自己new成按钮对象安装上去。\r\n- 为什么路由切换后再返回页面会发生报错？重新init一下，记得controller也要重新赋值。\r\n- 其他问题可以加下面QQ群\r\n- Demo下载地址:  https://ext.dcloud.net.cn/plugin?id=10867 \r\n\r\n# 示例\r\n\r\n***用它，没有多麻烦。***\r\n\r\n####  HTML\r\n\r\n\t<canvas id=\"canvas\" width=\"300\" height=\"300\"></canvas>\r\n\r\n#### JavaScript\r\n\r\n    const canvas = document.querySelector(\"canvas\");\r\n    const renderContext= canvas.getContext(\"2d\");\r\n    const [gesti,controller]=Gesti.mount({\r\n        renderContext,\r\n        rect:{\r\n          canvasWidth:canvas.width,\r\n          canvasHeight:canvas.height\r\n        }\r\n    });\r\n    controller.load(new Text(`New Text.\r\n      新建文本`))\r\n\r\n\r\n\r\n***不是吗？***\r\n\r\n\r\n### 需要帮助？\r\n\r\n- 添加QQ群聊(Gesti交流群),我们讨论一下问题  756829516 ","readmeFilename":"README.md","gitHead":"2f67ab4066e9b54b1beb4c9b07ba36e865884623","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_nodeVersion":"20.9.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-KO70FZrZ74rIAyLYrUUtkhiBcGtb3T1LOCtqiTbp7c9yI9NrkfmXhv4/CINbO6GcSFPCqWM3rOzJS+dhH7qXIg==","shasum":"e2eab7f1793d30cccf138eb5106b0d2e9a544ae0","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.4.51.tgz","fileCount":16,"unpackedSize":725017,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCpu78ZkgRaucuAlmDeQ1Di64VdWahJ740M3PJ9gU/cfQIgS+i00zun3RlZgoWypwq12TLMnbJr1LD7BpGgzRSFG+0="}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.4.51_1713236743601_0.518175769461408"},"_hasShrinkwrap":false},"1.4.52":{"name":"gesti","version":"1.4.52","description":"一个运行飞快的前端Canvas贴图工具","main":"index.js","types":"dist/types/index.d.ts","type":"module","scripts":{"build":"rollup --config rollup.config.js","test":"rollup --config rollup.config.js && node --loader ts-node/esm --inspect ./testGesti.ts","dev":"webpack-dev-server --config webpack.config.js --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/types/index.d.ts","default":"./index.js"}},"keywords":["图片贴图","图文编辑","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑","React Sticker","Vue Sticker"],"author":{"name":"AK1118"},"license":"MIT","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-terser":"^0.4.3","@rollup/plugin-typescript":"^11.0.0","@types/webpack":"^5.28.4","clean-webpack-plugin":"^4.0.0","glob":"^10.3.10","html-webpack-plugin":"^5.5.0","pako":"^2.1.0","rollup":"^3.17.3","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-copy":"^3.5.0","ts-loader":"^9.4.2","ts-node":"^10.9.1","tsconfig-paths":"^4.2.0","typescript":"^4.9.5","vconsole":"^3.15.1","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.15.1"},"_id":"gesti@1.4.52","readme":"### 主要特性\r\n\r\n- Typescript开发，JavaScript,TypeScript都支持\r\n- 支持 ESM & AMD ,支持 TS\r\n- 基于原生Canvas，兼容主流浏览器，PC端以及移动端,兼容微信小程序，Uniapp App 端。\r\n- 极简操作，更多功能，持续更新。\r\n\r\n# 效果图\r\n\r\n<img src=\"https://new.ivypha.com/static/uploads/2023/2/14/c3e00b72dc487661cdc63f03853215aa.gif\"/>\r\n\r\n# Gesti\r\n\r\n![](https://img.shields.io/github/stars/AK1118/Gesti.svg)\r\n\r\n**目录 (Table of Contents)**\r\n\r\n- [保存](#保存)\r\n- [在 微信小程序 | uniapp 端使用](#在-微信小程序--uniapp-端使用)\r\n- [可能会遇到的问题](#可能会遇到的问题)\r\n- [示例](#示例)\r\n\t\t\t- [HTML](#html)\r\n\t\t\t- [JavaScript 或 Typescript](#javascript-或-typescript)\r\n\r\n\r\n### 安装\r\n\r\n  ```\r\n  npm install gesti\r\n  ```\r\n\r\n### 引入使用\r\n\r\n  ```\r\n  import Gesti from \"gesti\";\r\n  ```\r\n\r\n### 初始化\r\n\r\n  ```\r\n  const gesti=new Gesti();\r\n      //h5端适用，其他端请参考API自行添加\r\n  const controller=gesti.initialization({\r\n    renderContext:g,\r\n    rect:{\r\n       canvasWidth:canvas.width,\r\n       canvasHeight:canvas.height\r\n     }\r\n  });\r\n  ```\r\n\r\n### 加入文字\r\n\r\n  ```\r\n    controller.load(new TextBox('New Text'));\r\n  ```\r\n\r\n# API\r\n\r\n## Gesti\r\n\r\n| 方法名      | 返回值类型  |  所属    |    参数    |   说明   |\r\n| :----:      |   :----: | :----:   |  :----:   | :----:      | \r\n| ~~init~~      |    void      |     Gesti   |    (canvas?: HTMLCanvasElement, paint?: CanvasRenderingContext2D, rect?:rectParam)   |     初始化 Gesti 时调用，共3个可选参数。canvas 和 paint 必须二选一，且没有传入canvas时，必须传入paint 和 rect.       |\r\n| ~~setConfig~~      |    void      |     Gesti   |   (config?: GestiConfigOption)   |     修改或设置配置，修改后会自动调用GestiController.update函数       |\r\n| initialization      |    GestiController      |     Gesti   |   (options:InitializationOption)   |     初始化gesti，返回控制器       |\r\n| static mount      |    [Gesti,GestiController]      |     Gesti   |   (options:InitializationOption)   |     通过静态方法初始化gesti, 返回gesti实例和它的控制器      |\r\n| static installPlugin      |    void      |     Gesti   |   (key:PluginsKey,plugin:any)   |     安装预设插件，使用某功能时再安装对应插件      |\r\n\r\n## GestiController\r\n\r\n| 方法名      | 返回值类型              |  所属    |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |    :----:   |   :----: |\r\n| updateText  | void              |    GestiController  |       (text: string, options?:TextOptions )     |      更新被选中的文字图层的文字内容，或者文字属性   |\r\n| layerLower  | void             |      GestiController     |    -      |    图层向下移动一层    |\r\n| layerRise  | void             |      GestiController     |     -     |    图层向上移动一层    |\r\n| layerTop  | void             |      GestiController     |     -     |    图层置于最顶层    |\r\n| layerBottom  | void             |      GestiController     |    -      |    图层置于最底层    |\r\n| lock    | void             |      GestiController     |     -     |    锁定当前选中图层    |\r\n| deLock    | void             |      GestiController     |     -     |    解锁当前选中图层    |\r\n| cancel    | void             |      GestiController     |      -    |    取消当前被聚焦对象    |\r\n| cancelAll    | void             |      GestiController     |     -     |    取消所有被聚焦对象    |\r\n| down    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标\\|手指点击事件时调用    |\r\n| up    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标\\|手指抬起事件时调用    |\r\n| move    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标\\|手指移动事件时调用    |\r\n| wheel    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标滚轮事件时调用    |\r\n| addListener    | any  |   GestiController |    (listenType:\"onSelect\"\\|\"onHide\"\\|\"onCancel\",callback:ListenerCallback)     |   监听图层操作，目前支持监听选中、取消选中和隐藏    |\r\n| removeListener    | void  |   GestiController |    (listenType:GestiControllerListenerTypes,hook:ListenerCallback)     |   根据addListener返回值，移除监听函数    |\r\n| rotate    | Promise\\<void\\>  |   GestiController |    angle: number     |   旋转被选中对象,传入弧度。可传入  角度*Math.PI/180     |\r\n| upward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向上移动距离 1     |\r\n| downward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向下移动距离 1     |\r\n| leftward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向左移动距离 1     |\r\n| rightward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向右移动距离 1     |\r\n| update    | void  |   GestiController |    -    |   调用后会重绘canvas,一般在改变数据后画布未刷新时使用     |\r\n| importAll    | Promise\\<void\\>  |   GestiController |    (json: string)   |   以json形式导入对象集合 H5 |\r\n| exportAll  | Promise\\<string\\>  |   GestiController |    -   |   以json形式导出对象集合 H5    |\r\n| center   | void  |   GestiController |   (axis?: \"vertical\" \\| \"horizon\")   |  垂直居中或者水平居中，不填写参数水平垂直居中    |\r\n| cancelEvent   | void  |   GestiController |   -   |  取消Gesti自带的鼠标手指时间监听。使用该函数后需要自行调用鼠标各个事件，请参考上方  down,up,move  ,使用详情参考Demo    |\r\n| addWrite   | \tvoid  |   GestiController |   (options: {type: \"circle\" \\| \"write\" \\| \"line\" \\| \"rect\" \\| \"none\";lineWidth?: number;color?: string;isFill?: boolean;})   |  添加涂鸦功能，调用该函数且传入options.type不为\"none\"时，下一次在canvas内滑动会触发生成对应的涂鸦对象,直到再次调用该函数且options.type为\"none\"时停止    |\r\n| getViewObjectById  | Promise\\<ViewObject\\>  |   GestiController |    (id:string)   |  通过id获取ViewObject对象    |\r\n\r\n\r\n| 属性名      | 返回值类型         |  所属    |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |    :----:   |   :----: |\r\n| currentViewObject| ViewObject | GestiController | - | 获取当前选中对象|\r\n\r\n\r\n## ViewObject（重要的阅读）\r\n- 画布内的可操作对象，每一张图片对象或者文字对象或者其他都是它在画布上的映射。\r\n- 获取它的途径一般来自于创建对象，它是一个基类，其子类还有TextBox , ImageBox ,WriteViewObj\r\n\r\n\r\n| 方法名      |   返回值         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|getBaseInfo | Object |   -    |    获取对象的向量信息      |\r\n|setName | void |  (name: string)    |    给对象设置名字      |\r\n|lock | void |  -   |    锁住它，不让他被操作      |\r\n|unLock | void |  -   |    解锁      |\r\n|hide  | void |  -   |    隐藏它，不是删除，删除我还没实现      |\r\n|show  | void |  -   |    显示      |\r\n|installButton  | void | (button: Button)   |   Gesti内不是没有按钮，是需要自己new过后安装     |\r\n|unInstallButton  | void | (buttons: Array<Button>)   |   卸载按钮     |\r\n|setSize  | void | (size: { width?: number; height?: number })   |   设置大小     |\r\n|setDecoration  | void | (args:any)   |  设置对象装饰，比如颜色，线条高度等，每个子类传入的参数不一     |\r\n|setOpacity  | void | (opacity:number)   |  设置对象不透明度，取值 0.0~1.0     |\r\n|toBackground  | void |  -   |  将该对象设置为背景,设置背景后可设置层级。所有事件将会被穿透   |\r\n\r\n\r\n| 属性名      |   返回值         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|rect | Rect |   -    |  获取对象大小最为合适    |\r\n|family | ViewObjectFamily |   -    |  获取对象类型,Gesti内可操作对象有多个家族，用来区分哪个对象是哪类    |\r\n|name | string |   -    |  有时候对象可以拥有一个名字    |\r\n|selected | boolean |   -    |  已经被选中了吗    |\r\n|originFamily | ViewObjectFamily |   -    |  家族起源家族，比如write是起源家族，它下面有line,rect，circle等分支家族    |\r\n|id | string |   -    |  设置该对象id    |\r\n\r\n\r\n\r\n## Button 对象\r\n- 控制ViewObject的功能按钮\r\n\r\n\r\n| 方法名      |   返回值         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|drawButton | -  |   Function(position: Vector, size: Size,radius:number, paint: Painter)    |    可重写该方法实现自定义按钮样式      |\r\n\r\n\r\n# Hooks 🚀\r\n- 还挺好用\r\n\r\n### 创建对象系列\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|createGesti | Gesti |     (config?: GestiConfigOption)    |    创建一个Gesti实例      |\r\n|useController | GestiController |    (target?: Gesti)    |  得到一个Gesti实例的控制器    |\r\n\r\n### 监听系列\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|onSelected  |   -    |    (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    选中对象时回调      |\r\n|onHover | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    是的，就像CSS3的Hover一样      |\r\n|onLeave | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    离开对象时调用      |\r\n|onCancel | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    取消选中时      |\r\n|onHide | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    隐藏可操作对象时      |\r\n|onUpdate | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    刷新画布时      |\r\n|onLoad | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    载入新的对象到画布内时      |\r\n|onBeforeDestroy  | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    销毁Gesti实例前执行      |\r\n|onDestroy| - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    销毁Gesti实例后执行      |\r\n|removeListener | - | (type: GestiControllerListenerTypes,hook: (_args: any) => any, target?: Gesti)    |    根据addListener返回值，移除监听函数    |\r\n\r\n\r\n\r\n\r\n\r\n### 添加预设系列\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|addVerticalLine | Promise\\<ViewObject> |    -     |    新增预设垂直线到画布内      |\r\n|addHorizonLine | Promise\\<ViewObject> |    -     |    新增预设水平线到画布内      |\r\n|addRect | Promise\\<ViewObject> |    -     |    新增预设矩形到画布内      |\r\n|addCircle | Promise\\<ViewObject> |    -     |    新增预设圆形到画布内      |\r\n\r\n\r\n### 创建ViewObject可操作对象系列\r\n- 自己创建的对象，用着放心\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|createTextBox | TextBox |   (text: string, options?: TextOptions)     |    创建一个文本对象      |\r\n|createXImage | XImage |   (option: {data,width:number,height:number})  |    创建一个XImage对象，注意，这个并不是你所看到的那个图片，可以理解为它是图片源，渲染由下面这个类做到      |\r\n|createImageBox | ImageBox |   (xImage: XImage)     |    创建一个图片对象      |\r\n|createDragButton | Button | (view: ViewObject)    |    创建一个拖拽按钮      |\r\n|createHorizonButton | Button | (view: ViewObject)    |    创建一个水平拖拽按钮      |\r\n|createVerticalButton | Button | (view: ViewObject)    |    创建一个垂直拖拽按钮      |\r\n|createRotateButton | Button | (view: ViewObject)    |    创建一个旋转按钮      |\r\n|createLockButton | Button | (view: ViewObject)    |    创建一个上锁按钮      |\r\n|createUnlockButton | Button | (view: ViewObject)    |    创建一个解锁按钮      |\r\n|createMirrorButton  | Button | (view: ViewObject)    |    创建一个镜像翻转按钮      |\r\n|createCloseButton  | Button | (view: ViewObject)    |    创建一个关闭按钮      |\r\n|installButton | - | (view: ViewObject, button: Button \\| Array<Button>)    |    安装按钮到ViewObject上      |\r\n|unInstallButton | - | (view: ViewObject, button: Button \\| Array<Button>)   |    卸载ViewObject上的按钮   |\r\n|loadToGesti | - |    (view: ViewObject, target?: Gesti)    |   加入一个ViewObject对象到画布内,以上的类都是继承于ViewObjet      |\r\n\r\n\r\n\r\n### use系列\r\n- 涂鸦功能\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|useGraffitiRect | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，矩形     |\r\n|useGraffitiCircle | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，圆形     |\r\n|useGraffitiLine | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，线条     |\r\n|useGraffitiWrite | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，手写板     |\r\n|useCloseGraffiti | - |    (option?: {...}, target?: Gesti    | 关闭涂鸦功能    |\r\n|useTextHandler | - |    (option?: {...}, target?: Gesti    | 得到一个TextBox实例控制器，用于控制它的参数    |\r\n|~~useReader~~ | Promise<ViewObject> |    (json: string)    | 传入特定格式的json，返回一个ViewObject对象    |\r\n|useReaderH5 | Promise<ViewObject> |    (json: string)    | 传入特定格式的json，返回一个ViewObject对象  H5    |\r\n|useReaderWeChat | Promise<ViewObject> |    (json: string)    | 传入特定格式的json，返回一个ViewObject对象 微信小程序 canvas 2d   |\r\n|useGetViewObject | Promise<ViewObject> |    (id: string)    |  通过id获取ViewObject对象    |\r\n\r\n\r\n### do系列\r\n- 需要做一些操作? 交给它们\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|doSelect | - |    (view?: ViewObject, target?: Gesti)    |  选中传入对象  |\r\n|doRotate | - |     (angle: number, existing?: boolean, view?: ViewObject, target?: Gesti)    |  旋转一个对象，不传入view默认当前选中对象  |\r\n|doPosition | - |     (x: number, x: number, view?: ViewObject, target?: Gesti)    |  设置一个对象的位置，不传入view默认当前选中对象  |\r\n|doCleanAll | - |    (view?: ViewObject, target?: Gesti)    |  画布内清空所有元素  |\r\n|doLayerLower | - |    (view?: ViewObject, target?: Gesti)    |  所在图层向下一层  |\r\n|doLayerRise | - |    (view?: ViewObject, target?: Gesti)    |  所在图层向上一层  |\r\n|doLayerTop | - |    (view?: ViewObject, target?: Gesti)    |  置于顶层  |\r\n|doLayerBottom | - |    (view?: ViewObject, target?: Gesti)    |  置于底层  |\r\n|doLock | - |    (view?: ViewObject, target?: Gesti)    |  锁住对象  |\r\n|doUnLock | - |    (view?: ViewObject, target?: Gesti)    |  解锁对象  |\r\n|doUpward | - |    (view?: ViewObject, target?: Gesti)    |  位置微调，上一个单位  |\r\n|doDownward | - |    (view?: ViewObject, target?: Gesti)    |  位置微调，下一个单位 |\r\n|doLeftward | - |    (view?: ViewObject, target?: Gesti)    |   位置微调，左一个单位  |\r\n|doRightward | - |    (view?: ViewObject, target?: Gesti)    |  位置微调，右一个单位  |\r\n|doCenter | - |   (view?: ViewObject, axis?: CenterAxis, target?: Gesti)    |  居中，可选水平或者垂直，不填就垂直水平居中  |\r\n|doCancel | - |    (view?: ViewObject, target?: Gesti)    |  取消选中单个/现在被选中的对象  |\r\n|doCancelAll | - |    -    |  取消所有被选中对象  |\r\n|doUpdate | - |    -    |  手动刷新画布  |\r\n|doCancelEvent | - |    -    |  取消原有画布事件代理,调用该方法后需要自定调用drive系列Hook,否则Gesti无法监听到您的手指/鼠标的位置  |\r\n\r\n\r\n### drive系列\r\n- 自定义鼠标/手指事件代理\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|driveMove | - |   (e:Event)    |  鼠标/手指移动时  |\r\n|driveUp | - |   (e:Event)    |  鼠标/手指抬起时  |\r\n|driveDown | - |   (e:Event)    |  鼠标/手指放下时  |\r\n|driveWheel | - |   (e:Event)    |  鼠标滚轮时  |\r\n\r\n\r\n### 尺寸适配\r\n- 物理单位转换像素  此处dpi取96   \r\n- 值得注意:Gesti内没有一个标准的单位，所有的单位都由您决定，比如画布创建设置大小时，图片创建传入时，字体设置大小时。总之，您输入多大，Gesti就为您显示多大（比如输入图片高宽为物理单位一厘米，那么在Gesti内您所看到的图片大小也会是一厘米高宽）\r\n- 以下提供的方法仅供参考，如需更精准的方案您可以自己实现。\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|mmToIn       | number          |   (mm:number)    |  毫米转换为英寸  |\r\n|inToPx       |number            |  (inch:number)    | 英寸转换为像素  |\r\n|ptToPx       | number             |   (pt:number)    | 英榜转换为像素（一般设置字体时用它）  |\r\n\r\n\r\n\r\n\r\n# 保存\r\n\r\n- 该库只是为您提供了canvas的代理操作，并没有改变canvas的任何原有API，所以您可以使用canvas自带的API进行存储。\r\n\r\n# 可能会遇到的问题\r\n- 图片导入不出现？数据变了图片没动？试试update方法刷新一下。\r\n- hooks和普通模式有啥区别吗? 个人认为Hooks更适合FP爱好者，普通模式适合OOP爱好者。\r\n- 图片 | 文字上没有可以直接操作的按钮吗？ 有,不过需要您自己new成按钮对象安装上去。\r\n- 为什么路由切换后再返回页面会发生报错？重新init一下，记得controller也要重新赋值。\r\n- 其他问题可以加下面QQ群\r\n- Demo下载地址:  https://ext.dcloud.net.cn/plugin?id=10867 \r\n\r\n# 示例\r\n\r\n***用它，没有多麻烦。***\r\n\r\n####  HTML\r\n\r\n\t<canvas id=\"canvas\" width=\"300\" height=\"300\"></canvas>\r\n\r\n#### JavaScript\r\n\r\n    const canvas = document.querySelector(\"canvas\");\r\n    const renderContext= canvas.getContext(\"2d\");\r\n    const [gesti,controller]=Gesti.mount({\r\n        renderContext,\r\n        rect:{\r\n          canvasWidth:canvas.width,\r\n          canvasHeight:canvas.height\r\n        }\r\n    });\r\n    controller.load(new Text(`New Text.\r\n      新建文本`))\r\n\r\n\r\n\r\n***不是吗？***\r\n\r\n\r\n### 需要帮助？\r\n\r\n- 添加QQ群聊(Gesti交流群),我们讨论一下问题  756829516 ","readmeFilename":"README.md","gitHead":"2f67ab4066e9b54b1beb4c9b07ba36e865884623","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_nodeVersion":"20.9.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-UM28bKIpuzjgo23a9qapfOAqlyvL//LFP7PLqEXlG5tCJHHCc72hOyZdTU/kO2dmdCazy0EVZBbVL4ldv3P39g==","shasum":"e1169969e5689b9b760705b99a6efdb0b17b31ae","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.4.52.tgz","fileCount":16,"unpackedSize":725937,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF8YT+EnzcNHB1GpxY75TvsG6hROk2Ec2zQDHnRkAIdpAiEA4l9NiMAif13VLHjcRg2vneCsqRUl0yWrIVXqDiD7Zao="}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.4.52_1713238652311_0.6568857720999268"},"_hasShrinkwrap":false},"1.4.53":{"name":"gesti","version":"1.4.53","description":"一个运行飞快的前端Canvas贴图工具","main":"index.js","types":"dist/types/index.d.ts","type":"module","scripts":{"build":"rollup --config rollup.config.js","test":"rollup --config rollup.config.js && node --loader ts-node/esm --inspect ./testGesti.ts","dev":"webpack-dev-server --config webpack.config.js --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/types/index.d.ts","default":"./index.js"}},"keywords":["图片贴图","图文编辑","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑","React Sticker","Vue Sticker"],"author":{"name":"AK1118"},"license":"MIT","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-terser":"^0.4.3","@rollup/plugin-typescript":"^11.0.0","@types/webpack":"^5.28.4","clean-webpack-plugin":"^4.0.0","glob":"^10.3.10","html-webpack-plugin":"^5.5.0","pako":"^2.1.0","rollup":"^3.17.3","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-copy":"^3.5.0","ts-loader":"^9.4.2","ts-node":"^10.9.1","tsconfig-paths":"^4.2.0","typescript":"^4.9.5","vconsole":"^3.15.1","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.15.1"},"_id":"gesti@1.4.53","readme":"### 主要特性\r\n\r\n- Typescript开发，JavaScript,TypeScript都支持\r\n- 支持 ESM & AMD ,支持 TS\r\n- 基于原生Canvas，兼容主流浏览器，PC端以及移动端,兼容微信小程序，Uniapp App 端。\r\n- 极简操作，更多功能，持续更新。\r\n\r\n# 效果图\r\n\r\n<img src=\"https://new.ivypha.com/static/uploads/2023/2/14/c3e00b72dc487661cdc63f03853215aa.gif\"/>\r\n\r\n# Gesti\r\n\r\n![](https://img.shields.io/github/stars/AK1118/Gesti.svg)\r\n\r\n**目录 (Table of Contents)**\r\n\r\n- [保存](#保存)\r\n- [在 微信小程序 | uniapp 端使用](#在-微信小程序--uniapp-端使用)\r\n- [可能会遇到的问题](#可能会遇到的问题)\r\n- [示例](#示例)\r\n\t\t\t- [HTML](#html)\r\n\t\t\t- [JavaScript 或 Typescript](#javascript-或-typescript)\r\n\r\n\r\n### 安装\r\n\r\n  ```\r\n  npm install gesti\r\n  ```\r\n\r\n### 引入使用\r\n\r\n  ```\r\n  import Gesti from \"gesti\";\r\n  ```\r\n\r\n### 初始化\r\n\r\n  ```\r\n  const gesti=new Gesti();\r\n      //h5端适用，其他端请参考API自行添加\r\n  const controller=gesti.initialization({\r\n    renderContext:g,\r\n    rect:{\r\n       canvasWidth:canvas.width,\r\n       canvasHeight:canvas.height\r\n     }\r\n  });\r\n  ```\r\n\r\n### 加入文字\r\n\r\n  ```\r\n    controller.load(new TextBox('New Text'));\r\n  ```\r\n\r\n# API\r\n\r\n## Gesti\r\n\r\n| 方法名      | 返回值类型  |  所属    |    参数    |   说明   |\r\n| :----:      |   :----: | :----:   |  :----:   | :----:      | \r\n| ~~init~~      |    void      |     Gesti   |    (canvas?: HTMLCanvasElement, paint?: CanvasRenderingContext2D, rect?:rectParam)   |     初始化 Gesti 时调用，共3个可选参数。canvas 和 paint 必须二选一，且没有传入canvas时，必须传入paint 和 rect.       |\r\n| ~~setConfig~~      |    void      |     Gesti   |   (config?: GestiConfigOption)   |     修改或设置配置，修改后会自动调用GestiController.update函数       |\r\n| initialization      |    GestiController      |     Gesti   |   (options:InitializationOption)   |     初始化gesti，返回控制器       |\r\n| static mount      |    [Gesti,GestiController]      |     Gesti   |   (options:InitializationOption)   |     通过静态方法初始化gesti, 返回gesti实例和它的控制器      |\r\n| static installPlugin      |    void      |     Gesti   |   (key:PluginsKey,plugin:any)   |     安装预设插件，使用某功能时再安装对应插件      |\r\n\r\n## GestiController\r\n\r\n| 方法名      | 返回值类型              |  所属    |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |    :----:   |   :----: |\r\n| updateText  | void              |    GestiController  |       (text: string, options?:TextOptions )     |      更新被选中的文字图层的文字内容，或者文字属性   |\r\n| layerLower  | void             |      GestiController     |    -      |    图层向下移动一层    |\r\n| layerRise  | void             |      GestiController     |     -     |    图层向上移动一层    |\r\n| layerTop  | void             |      GestiController     |     -     |    图层置于最顶层    |\r\n| layerBottom  | void             |      GestiController     |    -      |    图层置于最底层    |\r\n| lock    | void             |      GestiController     |     -     |    锁定当前选中图层    |\r\n| deLock    | void             |      GestiController     |     -     |    解锁当前选中图层    |\r\n| cancel    | void             |      GestiController     |      -    |    取消当前被聚焦对象    |\r\n| cancelAll    | void             |      GestiController     |     -     |    取消所有被聚焦对象    |\r\n| down    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标\\|手指点击事件时调用    |\r\n| up    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标\\|手指抬起事件时调用    |\r\n| move    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标\\|手指移动事件时调用    |\r\n| wheel    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标滚轮事件时调用    |\r\n| addListener    | any  |   GestiController |    (listenType:\"onSelect\"\\|\"onHide\"\\|\"onCancel\",callback:ListenerCallback)     |   监听图层操作，目前支持监听选中、取消选中和隐藏    |\r\n| removeListener    | void  |   GestiController |    (listenType:GestiControllerListenerTypes,hook:ListenerCallback)     |   根据addListener返回值，移除监听函数    |\r\n| rotate    | Promise\\<void\\>  |   GestiController |    angle: number     |   旋转被选中对象,传入弧度。可传入  角度*Math.PI/180     |\r\n| upward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向上移动距离 1     |\r\n| downward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向下移动距离 1     |\r\n| leftward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向左移动距离 1     |\r\n| rightward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向右移动距离 1     |\r\n| update    | void  |   GestiController |    -    |   调用后会重绘canvas,一般在改变数据后画布未刷新时使用     |\r\n| importAll    | Promise\\<void\\>  |   GestiController |    (json: string)   |   以json形式导入对象集合 H5 |\r\n| exportAll  | Promise\\<string\\>  |   GestiController |    -   |   以json形式导出对象集合 H5    |\r\n| center   | void  |   GestiController |   (axis?: \"vertical\" \\| \"horizon\")   |  垂直居中或者水平居中，不填写参数水平垂直居中    |\r\n| cancelEvent   | void  |   GestiController |   -   |  取消Gesti自带的鼠标手指时间监听。使用该函数后需要自行调用鼠标各个事件，请参考上方  down,up,move  ,使用详情参考Demo    |\r\n| addWrite   | \tvoid  |   GestiController |   (options: {type: \"circle\" \\| \"write\" \\| \"line\" \\| \"rect\" \\| \"none\";lineWidth?: number;color?: string;isFill?: boolean;})   |  添加涂鸦功能，调用该函数且传入options.type不为\"none\"时，下一次在canvas内滑动会触发生成对应的涂鸦对象,直到再次调用该函数且options.type为\"none\"时停止    |\r\n| getViewObjectById  | Promise\\<ViewObject\\>  |   GestiController |    (id:string)   |  通过id获取ViewObject对象    |\r\n\r\n\r\n| 属性名      | 返回值类型         |  所属    |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |    :----:   |   :----: |\r\n| currentViewObject| ViewObject | GestiController | - | 获取当前选中对象|\r\n\r\n\r\n## ViewObject（重要的阅读）\r\n- 画布内的可操作对象，每一张图片对象或者文字对象或者其他都是它在画布上的映射。\r\n- 获取它的途径一般来自于创建对象，它是一个基类，其子类还有TextBox , ImageBox ,WriteViewObj\r\n\r\n\r\n| 方法名      |   返回值         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|getBaseInfo | Object |   -    |    获取对象的向量信息      |\r\n|setName | void |  (name: string)    |    给对象设置名字      |\r\n|lock | void |  -   |    锁住它，不让他被操作      |\r\n|unLock | void |  -   |    解锁      |\r\n|hide  | void |  -   |    隐藏它，不是删除，删除我还没实现      |\r\n|show  | void |  -   |    显示      |\r\n|installButton  | void | (button: Button)   |   Gesti内不是没有按钮，是需要自己new过后安装     |\r\n|unInstallButton  | void | (buttons: Array<Button>)   |   卸载按钮     |\r\n|setSize  | void | (size: { width?: number; height?: number })   |   设置大小     |\r\n|setDecoration  | void | (args:any)   |  设置对象装饰，比如颜色，线条高度等，每个子类传入的参数不一     |\r\n|setOpacity  | void | (opacity:number)   |  设置对象不透明度，取值 0.0~1.0     |\r\n|toBackground  | void |  -   |  将该对象设置为背景,设置背景后可设置层级。所有事件将会被穿透   |\r\n\r\n\r\n| 属性名      |   返回值         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|rect | Rect |   -    |  获取对象大小最为合适    |\r\n|family | ViewObjectFamily |   -    |  获取对象类型,Gesti内可操作对象有多个家族，用来区分哪个对象是哪类    |\r\n|name | string |   -    |  有时候对象可以拥有一个名字    |\r\n|selected | boolean |   -    |  已经被选中了吗    |\r\n|originFamily | ViewObjectFamily |   -    |  家族起源家族，比如write是起源家族，它下面有line,rect，circle等分支家族    |\r\n|id | string |   -    |  设置该对象id    |\r\n\r\n\r\n\r\n## Button 对象\r\n- 控制ViewObject的功能按钮\r\n\r\n\r\n| 方法名      |   返回值         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|drawButton | -  |   Function(position: Vector, size: Size,radius:number, paint: Painter)    |    可重写该方法实现自定义按钮样式      |\r\n\r\n\r\n# Hooks 🚀\r\n- 还挺好用\r\n\r\n### 创建对象系列\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|createGesti | Gesti |     (config?: GestiConfigOption)    |    创建一个Gesti实例      |\r\n|useController | GestiController |    (target?: Gesti)    |  得到一个Gesti实例的控制器    |\r\n\r\n### 监听系列\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|onSelected  |   -    |    (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    选中对象时回调      |\r\n|onHover | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    是的，就像CSS3的Hover一样      |\r\n|onLeave | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    离开对象时调用      |\r\n|onCancel | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    取消选中时      |\r\n|onHide | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    隐藏可操作对象时      |\r\n|onUpdate | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    刷新画布时      |\r\n|onLoad | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    载入新的对象到画布内时      |\r\n|onBeforeDestroy  | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    销毁Gesti实例前执行      |\r\n|onDestroy| - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    销毁Gesti实例后执行      |\r\n|removeListener | - | (type: GestiControllerListenerTypes,hook: (_args: any) => any, target?: Gesti)    |    根据addListener返回值，移除监听函数    |\r\n\r\n\r\n\r\n\r\n\r\n### 添加预设系列\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|addVerticalLine | Promise\\<ViewObject> |    -     |    新增预设垂直线到画布内      |\r\n|addHorizonLine | Promise\\<ViewObject> |    -     |    新增预设水平线到画布内      |\r\n|addRect | Promise\\<ViewObject> |    -     |    新增预设矩形到画布内      |\r\n|addCircle | Promise\\<ViewObject> |    -     |    新增预设圆形到画布内      |\r\n\r\n\r\n### 创建ViewObject可操作对象系列\r\n- 自己创建的对象，用着放心\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|createTextBox | TextBox |   (text: string, options?: TextOptions)     |    创建一个文本对象      |\r\n|createXImage | XImage |   (option: {data,width:number,height:number})  |    创建一个XImage对象，注意，这个并不是你所看到的那个图片，可以理解为它是图片源，渲染由下面这个类做到      |\r\n|createImageBox | ImageBox |   (xImage: XImage)     |    创建一个图片对象      |\r\n|createDragButton | Button | (view: ViewObject)    |    创建一个拖拽按钮      |\r\n|createHorizonButton | Button | (view: ViewObject)    |    创建一个水平拖拽按钮      |\r\n|createVerticalButton | Button | (view: ViewObject)    |    创建一个垂直拖拽按钮      |\r\n|createRotateButton | Button | (view: ViewObject)    |    创建一个旋转按钮      |\r\n|createLockButton | Button | (view: ViewObject)    |    创建一个上锁按钮      |\r\n|createUnlockButton | Button | (view: ViewObject)    |    创建一个解锁按钮      |\r\n|createMirrorButton  | Button | (view: ViewObject)    |    创建一个镜像翻转按钮      |\r\n|createCloseButton  | Button | (view: ViewObject)    |    创建一个关闭按钮      |\r\n|installButton | - | (view: ViewObject, button: Button \\| Array<Button>)    |    安装按钮到ViewObject上      |\r\n|unInstallButton | - | (view: ViewObject, button: Button \\| Array<Button>)   |    卸载ViewObject上的按钮   |\r\n|loadToGesti | - |    (view: ViewObject, target?: Gesti)    |   加入一个ViewObject对象到画布内,以上的类都是继承于ViewObjet      |\r\n\r\n\r\n\r\n### use系列\r\n- 涂鸦功能\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|useGraffitiRect | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，矩形     |\r\n|useGraffitiCircle | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，圆形     |\r\n|useGraffitiLine | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，线条     |\r\n|useGraffitiWrite | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，手写板     |\r\n|useCloseGraffiti | - |    (option?: {...}, target?: Gesti    | 关闭涂鸦功能    |\r\n|useTextHandler | - |    (option?: {...}, target?: Gesti    | 得到一个TextBox实例控制器，用于控制它的参数    |\r\n|~~useReader~~ | Promise<ViewObject> |    (json: string)    | 传入特定格式的json，返回一个ViewObject对象    |\r\n|useReaderH5 | Promise<ViewObject> |    (json: string)    | 传入特定格式的json，返回一个ViewObject对象  H5    |\r\n|useReaderWeChat | Promise<ViewObject> |    (json: string)    | 传入特定格式的json，返回一个ViewObject对象 微信小程序 canvas 2d   |\r\n|useGetViewObject | Promise<ViewObject> |    (id: string)    |  通过id获取ViewObject对象    |\r\n\r\n\r\n### do系列\r\n- 需要做一些操作? 交给它们\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|doSelect | - |    (view?: ViewObject, target?: Gesti)    |  选中传入对象  |\r\n|doRotate | - |     (angle: number, existing?: boolean, view?: ViewObject, target?: Gesti)    |  旋转一个对象，不传入view默认当前选中对象  |\r\n|doPosition | - |     (x: number, x: number, view?: ViewObject, target?: Gesti)    |  设置一个对象的位置，不传入view默认当前选中对象  |\r\n|doCleanAll | - |    (view?: ViewObject, target?: Gesti)    |  画布内清空所有元素  |\r\n|doLayerLower | - |    (view?: ViewObject, target?: Gesti)    |  所在图层向下一层  |\r\n|doLayerRise | - |    (view?: ViewObject, target?: Gesti)    |  所在图层向上一层  |\r\n|doLayerTop | - |    (view?: ViewObject, target?: Gesti)    |  置于顶层  |\r\n|doLayerBottom | - |    (view?: ViewObject, target?: Gesti)    |  置于底层  |\r\n|doLock | - |    (view?: ViewObject, target?: Gesti)    |  锁住对象  |\r\n|doUnLock | - |    (view?: ViewObject, target?: Gesti)    |  解锁对象  |\r\n|doUpward | - |    (view?: ViewObject, target?: Gesti)    |  位置微调，上一个单位  |\r\n|doDownward | - |    (view?: ViewObject, target?: Gesti)    |  位置微调，下一个单位 |\r\n|doLeftward | - |    (view?: ViewObject, target?: Gesti)    |   位置微调，左一个单位  |\r\n|doRightward | - |    (view?: ViewObject, target?: Gesti)    |  位置微调，右一个单位  |\r\n|doCenter | - |   (view?: ViewObject, axis?: CenterAxis, target?: Gesti)    |  居中，可选水平或者垂直，不填就垂直水平居中  |\r\n|doCancel | - |    (view?: ViewObject, target?: Gesti)    |  取消选中单个/现在被选中的对象  |\r\n|doCancelAll | - |    -    |  取消所有被选中对象  |\r\n|doUpdate | - |    -    |  手动刷新画布  |\r\n|doCancelEvent | - |    -    |  取消原有画布事件代理,调用该方法后需要自定调用drive系列Hook,否则Gesti无法监听到您的手指/鼠标的位置  |\r\n\r\n\r\n### drive系列\r\n- 自定义鼠标/手指事件代理\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|driveMove | - |   (e:Event)    |  鼠标/手指移动时  |\r\n|driveUp | - |   (e:Event)    |  鼠标/手指抬起时  |\r\n|driveDown | - |   (e:Event)    |  鼠标/手指放下时  |\r\n|driveWheel | - |   (e:Event)    |  鼠标滚轮时  |\r\n\r\n\r\n### 尺寸适配\r\n- 物理单位转换像素  此处dpi取96   \r\n- 值得注意:Gesti内没有一个标准的单位，所有的单位都由您决定，比如画布创建设置大小时，图片创建传入时，字体设置大小时。总之，您输入多大，Gesti就为您显示多大（比如输入图片高宽为物理单位一厘米，那么在Gesti内您所看到的图片大小也会是一厘米高宽）\r\n- 以下提供的方法仅供参考，如需更精准的方案您可以自己实现。\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|mmToIn       | number          |   (mm:number)    |  毫米转换为英寸  |\r\n|inToPx       |number            |  (inch:number)    | 英寸转换为像素  |\r\n|ptToPx       | number             |   (pt:number)    | 英榜转换为像素（一般设置字体时用它）  |\r\n\r\n\r\n\r\n\r\n# 保存\r\n\r\n- 该库只是为您提供了canvas的代理操作，并没有改变canvas的任何原有API，所以您可以使用canvas自带的API进行存储。\r\n\r\n# 可能会遇到的问题\r\n- 图片导入不出现？数据变了图片没动？试试update方法刷新一下。\r\n- hooks和普通模式有啥区别吗? 个人认为Hooks更适合FP爱好者，普通模式适合OOP爱好者。\r\n- 图片 | 文字上没有可以直接操作的按钮吗？ 有,不过需要您自己new成按钮对象安装上去。\r\n- 为什么路由切换后再返回页面会发生报错？重新init一下，记得controller也要重新赋值。\r\n- 其他问题可以加下面QQ群\r\n- Demo下载地址:  https://ext.dcloud.net.cn/plugin?id=10867 \r\n\r\n# 示例\r\n\r\n***用它，没有多麻烦。***\r\n\r\n####  HTML\r\n\r\n\t<canvas id=\"canvas\" width=\"300\" height=\"300\"></canvas>\r\n\r\n#### JavaScript\r\n\r\n    const canvas = document.querySelector(\"canvas\");\r\n    const renderContext= canvas.getContext(\"2d\");\r\n    const [gesti,controller]=Gesti.mount({\r\n        renderContext,\r\n        rect:{\r\n          canvasWidth:canvas.width,\r\n          canvasHeight:canvas.height\r\n        }\r\n    });\r\n    controller.load(new Text(`New Text.\r\n      新建文本`))\r\n\r\n\r\n\r\n***不是吗？***\r\n\r\n\r\n### 需要帮助？\r\n\r\n- 添加QQ群聊(Gesti交流群),我们讨论一下问题  756829516 ","readmeFilename":"README.md","gitHead":"2f67ab4066e9b54b1beb4c9b07ba36e865884623","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_nodeVersion":"20.9.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-B0tOMzdBKTIqMm+nJ6JtHfYHyBGZgWygRsmM22GFFgxhxsSbILQjhzagkQ8uVHnCtpamT8fOsC70BjnWOMPNqQ==","shasum":"34ecf18ce90f6ed791d67fb187bba1f6a36bf204","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.4.53.tgz","fileCount":16,"unpackedSize":725943,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC03rSIo2S49dnYPQDLeL80EAEKBlwXAJW6XCGf08GDuQIgNGPBiSJuXgS20/zbrd+bFT7rWfPD03+FF/i7ZW+VID4="}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.4.53_1713320818331_0.06279675475166746"},"_hasShrinkwrap":false},"1.4.54":{"name":"gesti","version":"1.4.54","description":"一个运行飞快的前端Canvas贴图工具","main":"index.js","types":"dist/types/index.d.ts","type":"module","scripts":{"build":"rollup --config rollup.config.js","test":"rollup --config rollup.config.js && node --loader ts-node/esm --inspect ./testGesti.ts","dev":"webpack-dev-server --config webpack.config.js --mode development"},"repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.amd.js","types":"./dist/types/index.d.ts","default":"./index.js"}},"keywords":["图片贴图","图文编辑","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑","React Sticker","Vue Sticker"],"author":{"name":"AK1118"},"license":"MIT","devDependencies":{"@babel/preset-typescript":"^7.21.0","@rollup/plugin-terser":"^0.4.3","@rollup/plugin-typescript":"^11.0.0","@types/webpack":"^5.28.4","clean-webpack-plugin":"^4.0.0","glob":"^10.3.10","html-webpack-plugin":"^5.5.0","pako":"^2.1.0","rollup":"^3.17.3","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-copy":"^3.5.0","ts-loader":"^9.4.2","ts-node":"^10.9.1","tsconfig-paths":"^4.2.0","typescript":"^4.9.5","vconsole":"^3.15.1","webpack":"^5.75.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.15.1"},"_id":"gesti@1.4.54","gitHead":"52df6a8e13b4704aacddd01c1d4f3479e1234b71","bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"homepage":"https://github.com/AK1118/Gesti#readme","_nodeVersion":"20.9.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-E/5a0dTnz6+ljX8BbfP7wWAQMSbFeK8f9EXczcxFdMP2/AJuAL5NupWJLIExLWXicERMFCFW8o0giACOarQ6zw==","shasum":"a9125465a68bfb85af5013f66a064e1cf5c8515a","tarball":"https://registry.npmjs.org/gesti/-/gesti-1.4.54.tgz","fileCount":16,"unpackedSize":725943,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID0r8Au7GoSy4a8NHDmXim/LD1R20lv+boiClkI/AGYxAiBSfoNZjv+sYaZHobj4qitxcG7CHQ+Zx6ztJedQqeKGtQ=="}]},"_npmUser":{"name":"ak1118","email":"158172601@qq.com"},"directories":{},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gesti_1.4.54_1713336094060_0.5689713149882667"},"_hasShrinkwrap":false}},"time":{"created":"2023-02-11T02:46:59.658Z","1.0.0":"2023-02-11T02:46:59.945Z","modified":"2024-04-17T06:41:34.449Z","1.0.1":"2023-02-11T03:10:21.995Z","1.0.2":"2023-02-11T03:23:41.577Z","1.0.3":"2023-02-11T07:31:14.560Z","1.0.4":"2023-02-11T08:12:18.278Z","1.0.5":"2023-02-11T10:15:22.485Z","1.0.6":"2023-02-13T03:26:56.118Z","1.0.7":"2023-02-13T09:26:46.866Z","1.0.8":"2023-02-13T09:34:56.222Z","1.0.9":"2023-02-14T03:08:01.894Z","1.1.0":"2023-02-22T03:27:32.452Z","1.1.1":"2023-02-22T03:59:43.888Z","1.1.2":"2023-02-23T06:37:59.017Z","1.1.3":"2023-02-23T09:21:56.210Z","1.1.4":"2023-02-24T04:17:30.741Z","1.1.5":"2023-02-27T01:48:20.825Z","1.1.6":"2023-02-27T01:57:26.978Z","1.1.7":"2023-02-27T06:51:10.892Z","1.1.8":"2023-03-01T09:32:37.810Z","1.1.9":"2023-03-28T06:48:02.927Z","1.1.10":"2023-04-08T03:51:18.605Z","1.1.11":"2023-04-08T03:52:27.426Z","1.1.12":"2023-04-08T09:16:03.954Z","1.2.0":"2023-05-09T03:31:34.155Z","1.2.1":"2023-05-09T06:22:50.781Z","1.2.11":"2023-05-09T06:55:41.771Z","1.2.12":"2023-05-10T02:37:35.785Z","1.2.13":"2023-05-10T02:54:06.142Z","1.2.14":"2023-05-11T02:53:23.359Z","1.2.15":"2023-05-15T08:29:30.069Z","1.3.0":"2023-05-16T02:04:40.759Z","1.3.1":"2023-05-16T06:47:14.056Z","1.3.11":"2023-05-16T07:21:35.613Z","1.3.12":"2023-05-16T07:28:59.380Z","1.3.13":"2023-05-16T09:05:53.703Z","1.3.14":"2023-05-16T10:05:36.282Z","1.3.15":"2023-05-16T10:19:32.164Z","1.3.16":"2023-05-17T01:40:03.292Z","1.3.17":"2023-05-17T02:11:02.139Z","1.3.18":"2023-05-17T09:36:57.102Z","1.3.20":"2023-05-17T09:42:06.349Z","1.3.21":"2023-05-18T06:48:39.995Z","1.3.22":"2023-05-20T03:21:16.611Z","1.3.23":"2023-08-11T07:45:58.310Z","1.3.27":"2023-09-07T03:13:53.558Z","1.3.28":"2023-09-19T07:05:27.962Z","1.3.29":"2023-09-25T09:48:36.462Z","1.3.60":"2023-11-21T09:45:11.240Z","1.3.61":"2023-11-22T01:46:44.575Z","1.3.62":"2023-11-22T03:48:53.702Z","1.3.63":"2023-11-22T06:08:25.074Z","1.3.64":"2023-11-24T01:39:42.837Z","1.3.65":"2023-11-25T01:25:17.241Z","1.3.66":"2023-11-25T01:34:31.058Z","1.3.88":"2024-02-06T10:06:34.029Z","1.3.89":"2024-02-19T06:42:00.765Z","1.3.90":"2024-02-23T08:57:15.068Z","1.3.91":"2024-02-26T06:13:50.440Z","1.3.92":"2024-02-26T08:06:22.204Z","1.3.93":"2024-02-26T09:21:33.103Z","1.3.94":"2024-02-28T09:51:51.158Z","1.3.95":"2024-03-05T01:59:41.649Z","1.3.96":"2024-03-29T03:20:01.203Z","1.3.97":"2024-04-01T06:11:39.216Z","1.3.98":"2024-04-01T06:22:16.718Z","1.3.99":"2024-04-01T06:26:26.831Z","1.4.1":"2024-04-01T07:06:14.014Z","1.4.2":"2024-04-01T07:23:47.178Z","1.4.3":"2024-04-01T07:52:12.783Z","1.4.4":"2024-04-01T08:06:51.667Z","1.4.5":"2024-04-16T03:03:25.712Z","1.4.51":"2024-04-16T03:05:43.864Z","1.4.52":"2024-04-16T03:37:32.519Z","1.4.53":"2024-04-17T02:26:58.559Z","1.4.54":"2024-04-17T06:41:34.276Z"},"maintainers":[{"name":"ak1118","email":"158172601@qq.com"}],"license":"MIT","readme":"### 主要特性\r\n\r\n- Typescript开发，JavaScript,TypeScript都支持\r\n- 支持 ESM & AMD ,支持 TS\r\n- 基于原生Canvas，兼容主流浏览器，PC端以及移动端,兼容微信小程序，Uniapp App 端。\r\n- 极简操作，更多功能，持续更新。\r\n\r\n# 效果图\r\n\r\n<img src=\"https://new.ivypha.com/static/uploads/2023/2/14/c3e00b72dc487661cdc63f03853215aa.gif\"/>\r\n\r\n# Gesti\r\n\r\n![](https://img.shields.io/github/stars/AK1118/Gesti.svg)\r\n\r\n**目录 (Table of Contents)**\r\n\r\n- [保存](#保存)\r\n- [在 微信小程序 | uniapp 端使用](#在-微信小程序--uniapp-端使用)\r\n- [可能会遇到的问题](#可能会遇到的问题)\r\n- [示例](#示例)\r\n\t\t\t- [HTML](#html)\r\n\t\t\t- [JavaScript 或 Typescript](#javascript-或-typescript)\r\n\r\n\r\n### 安装\r\n\r\n  ```\r\n  npm install gesti\r\n  ```\r\n\r\n### 引入使用\r\n\r\n  ```\r\n  import Gesti from \"gesti\";\r\n  ```\r\n\r\n### 初始化\r\n\r\n  ```\r\n  const gesti=new Gesti();\r\n      //h5端适用，其他端请参考API自行添加\r\n  const controller=gesti.initialization({\r\n    renderContext:g,\r\n    rect:{\r\n       canvasWidth:canvas.width,\r\n       canvasHeight:canvas.height\r\n     }\r\n  });\r\n  ```\r\n\r\n### 加入文字\r\n\r\n  ```\r\n    controller.load(new TextBox('New Text'));\r\n  ```\r\n\r\n# API\r\n\r\n## Gesti\r\n\r\n| 方法名      | 返回值类型  |  所属    |    参数    |   说明   |\r\n| :----:      |   :----: | :----:   |  :----:   | :----:      | \r\n| ~~init~~      |    void      |     Gesti   |    (canvas?: HTMLCanvasElement, paint?: CanvasRenderingContext2D, rect?:rectParam)   |     初始化 Gesti 时调用，共3个可选参数。canvas 和 paint 必须二选一，且没有传入canvas时，必须传入paint 和 rect.       |\r\n| ~~setConfig~~      |    void      |     Gesti   |   (config?: GestiConfigOption)   |     修改或设置配置，修改后会自动调用GestiController.update函数       |\r\n| initialization      |    GestiController      |     Gesti   |   (options:InitializationOption)   |     初始化gesti，返回控制器       |\r\n| static mount      |    [Gesti,GestiController]      |     Gesti   |   (options:InitializationOption)   |     通过静态方法初始化gesti, 返回gesti实例和它的控制器      |\r\n| static installPlugin      |    void      |     Gesti   |   (key:PluginsKey,plugin:any)   |     安装预设插件，使用某功能时再安装对应插件      |\r\n\r\n## GestiController\r\n\r\n| 方法名      | 返回值类型              |  所属    |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |    :----:   |   :----: |\r\n| updateText  | void              |    GestiController  |       (text: string, options?:TextOptions )     |      更新被选中的文字图层的文字内容，或者文字属性   |\r\n| layerLower  | void             |      GestiController     |    -      |    图层向下移动一层    |\r\n| layerRise  | void             |      GestiController     |     -     |    图层向上移动一层    |\r\n| layerTop  | void             |      GestiController     |     -     |    图层置于最顶层    |\r\n| layerBottom  | void             |      GestiController     |    -      |    图层置于最底层    |\r\n| lock    | void             |      GestiController     |     -     |    锁定当前选中图层    |\r\n| deLock    | void             |      GestiController     |     -     |    解锁当前选中图层    |\r\n| cancel    | void             |      GestiController     |      -    |    取消当前被聚焦对象    |\r\n| cancelAll    | void             |      GestiController     |     -     |    取消所有被聚焦对象    |\r\n| down    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标\\|手指点击事件时调用    |\r\n| up    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标\\|手指抬起事件时调用    |\r\n| move    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标\\|手指移动事件时调用    |\r\n| wheel    | void             |      GestiController     |     (e: MouseEvent \\| Event \\| EventHandle)     |    鼠标滚轮事件时调用    |\r\n| addListener    | any  |   GestiController |    (listenType:\"onSelect\"\\|\"onHide\"\\|\"onCancel\",callback:ListenerCallback)     |   监听图层操作，目前支持监听选中、取消选中和隐藏    |\r\n| removeListener    | void  |   GestiController |    (listenType:GestiControllerListenerTypes,hook:ListenerCallback)     |   根据addListener返回值，移除监听函数    |\r\n| rotate    | Promise\\<void\\>  |   GestiController |    angle: number     |   旋转被选中对象,传入弧度。可传入  角度*Math.PI/180     |\r\n| upward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向上移动距离 1     |\r\n| downward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向下移动距离 1     |\r\n| leftward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向左移动距离 1     |\r\n| rightward    | number  |   GestiController |    (viewObject?: ViewObject)     |   被选中对象微调，向右移动距离 1     |\r\n| update    | void  |   GestiController |    -    |   调用后会重绘canvas,一般在改变数据后画布未刷新时使用     |\r\n| importAll    | Promise\\<void\\>  |   GestiController |    (json: string)   |   以json形式导入对象集合 H5 |\r\n| exportAll  | Promise\\<string\\>  |   GestiController |    -   |   以json形式导出对象集合 H5    |\r\n| center   | void  |   GestiController |   (axis?: \"vertical\" \\| \"horizon\")   |  垂直居中或者水平居中，不填写参数水平垂直居中    |\r\n| cancelEvent   | void  |   GestiController |   -   |  取消Gesti自带的鼠标手指时间监听。使用该函数后需要自行调用鼠标各个事件，请参考上方  down,up,move  ,使用详情参考Demo    |\r\n| addWrite   | \tvoid  |   GestiController |   (options: {type: \"circle\" \\| \"write\" \\| \"line\" \\| \"rect\" \\| \"none\";lineWidth?: number;color?: string;isFill?: boolean;})   |  添加涂鸦功能，调用该函数且传入options.type不为\"none\"时，下一次在canvas内滑动会触发生成对应的涂鸦对象,直到再次调用该函数且options.type为\"none\"时停止    |\r\n| getViewObjectById  | Promise\\<ViewObject\\>  |   GestiController |    (id:string)   |  通过id获取ViewObject对象    |\r\n\r\n\r\n| 属性名      | 返回值类型         |  所属    |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |    :----:   |   :----: |\r\n| currentViewObject| ViewObject | GestiController | - | 获取当前选中对象|\r\n\r\n\r\n## ViewObject（重要的阅读）\r\n- 画布内的可操作对象，每一张图片对象或者文字对象或者其他都是它在画布上的映射。\r\n- 获取它的途径一般来自于创建对象，它是一个基类，其子类还有TextBox , ImageBox ,WriteViewObj\r\n\r\n\r\n| 方法名      |   返回值         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|getBaseInfo | Object |   -    |    获取对象的向量信息      |\r\n|setName | void |  (name: string)    |    给对象设置名字      |\r\n|lock | void |  -   |    锁住它，不让他被操作      |\r\n|unLock | void |  -   |    解锁      |\r\n|hide  | void |  -   |    隐藏它，不是删除，删除我还没实现      |\r\n|show  | void |  -   |    显示      |\r\n|installButton  | void | (button: Button)   |   Gesti内不是没有按钮，是需要自己new过后安装     |\r\n|unInstallButton  | void | (buttons: Array<Button>)   |   卸载按钮     |\r\n|setSize  | void | (size: { width?: number; height?: number })   |   设置大小     |\r\n|setDecoration  | void | (args:any)   |  设置对象装饰，比如颜色，线条高度等，每个子类传入的参数不一     |\r\n|setOpacity  | void | (opacity:number)   |  设置对象不透明度，取值 0.0~1.0     |\r\n|toBackground  | void |  -   |  将该对象设置为背景,设置背景后可设置层级。所有事件将会被穿透   |\r\n\r\n\r\n| 属性名      |   返回值         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|rect | Rect |   -    |  获取对象大小最为合适    |\r\n|family | ViewObjectFamily |   -    |  获取对象类型,Gesti内可操作对象有多个家族，用来区分哪个对象是哪类    |\r\n|name | string |   -    |  有时候对象可以拥有一个名字    |\r\n|selected | boolean |   -    |  已经被选中了吗    |\r\n|originFamily | ViewObjectFamily |   -    |  家族起源家族，比如write是起源家族，它下面有line,rect，circle等分支家族    |\r\n|id | string |   -    |  设置该对象id    |\r\n\r\n\r\n\r\n## Button 对象\r\n- 控制ViewObject的功能按钮\r\n\r\n\r\n| 方法名      |   返回值         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|drawButton | -  |   Function(position: Vector, size: Size,radius:number, paint: Painter)    |    可重写该方法实现自定义按钮样式      |\r\n\r\n\r\n# Hooks 🚀\r\n- 还挺好用\r\n\r\n### 创建对象系列\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|createGesti | Gesti |     (config?: GestiConfigOption)    |    创建一个Gesti实例      |\r\n|useController | GestiController |    (target?: Gesti)    |  得到一个Gesti实例的控制器    |\r\n\r\n### 监听系列\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|onSelected  |   -    |    (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    选中对象时回调      |\r\n|onHover | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    是的，就像CSS3的Hover一样      |\r\n|onLeave | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    离开对象时调用      |\r\n|onCancel | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    取消选中时      |\r\n|onHide | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    隐藏可操作对象时      |\r\n|onUpdate | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    刷新画布时      |\r\n|onLoad | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    载入新的对象到画布内时      |\r\n|onBeforeDestroy  | - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    销毁Gesti实例前执行      |\r\n|onDestroy| - |     (hook: (_args: any) => any, target?: Gesti, prepend?: boolean)    |    销毁Gesti实例后执行      |\r\n|removeListener | - | (type: GestiControllerListenerTypes,hook: (_args: any) => any, target?: Gesti)    |    根据addListener返回值，移除监听函数    |\r\n\r\n\r\n\r\n\r\n\r\n### 添加预设系列\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|addVerticalLine | Promise\\<ViewObject> |    -     |    新增预设垂直线到画布内      |\r\n|addHorizonLine | Promise\\<ViewObject> |    -     |    新增预设水平线到画布内      |\r\n|addRect | Promise\\<ViewObject> |    -     |    新增预设矩形到画布内      |\r\n|addCircle | Promise\\<ViewObject> |    -     |    新增预设圆形到画布内      |\r\n\r\n\r\n### 创建ViewObject可操作对象系列\r\n- 自己创建的对象，用着放心\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|createTextBox | TextBox |   (text: string, options?: TextOptions)     |    创建一个文本对象      |\r\n|createXImage | XImage |   (option: {data,width:number,height:number})  |    创建一个XImage对象，注意，这个并不是你所看到的那个图片，可以理解为它是图片源，渲染由下面这个类做到      |\r\n|createImageBox | ImageBox |   (xImage: XImage)     |    创建一个图片对象      |\r\n|createDragButton | Button | (view: ViewObject)    |    创建一个拖拽按钮      |\r\n|createHorizonButton | Button | (view: ViewObject)    |    创建一个水平拖拽按钮      |\r\n|createVerticalButton | Button | (view: ViewObject)    |    创建一个垂直拖拽按钮      |\r\n|createRotateButton | Button | (view: ViewObject)    |    创建一个旋转按钮      |\r\n|createLockButton | Button | (view: ViewObject)    |    创建一个上锁按钮      |\r\n|createUnlockButton | Button | (view: ViewObject)    |    创建一个解锁按钮      |\r\n|createMirrorButton  | Button | (view: ViewObject)    |    创建一个镜像翻转按钮      |\r\n|createCloseButton  | Button | (view: ViewObject)    |    创建一个关闭按钮      |\r\n|installButton | - | (view: ViewObject, button: Button \\| Array<Button>)    |    安装按钮到ViewObject上      |\r\n|unInstallButton | - | (view: ViewObject, button: Button \\| Array<Button>)   |    卸载ViewObject上的按钮   |\r\n|loadToGesti | - |    (view: ViewObject, target?: Gesti)    |   加入一个ViewObject对象到画布内,以上的类都是继承于ViewObjet      |\r\n\r\n\r\n\r\n### use系列\r\n- 涂鸦功能\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|useGraffitiRect | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，矩形     |\r\n|useGraffitiCircle | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，圆形     |\r\n|useGraffitiLine | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，线条     |\r\n|useGraffitiWrite | - |    (option?: {...}, target?: Gesti    | 开启涂鸦功能，手写板     |\r\n|useCloseGraffiti | - |    (option?: {...}, target?: Gesti    | 关闭涂鸦功能    |\r\n|useTextHandler | - |    (option?: {...}, target?: Gesti    | 得到一个TextBox实例控制器，用于控制它的参数    |\r\n|~~useReader~~ | Promise<ViewObject> |    (json: string)    | 传入特定格式的json，返回一个ViewObject对象    |\r\n|useReaderH5 | Promise<ViewObject> |    (json: string)    | 传入特定格式的json，返回一个ViewObject对象  H5    |\r\n|useReaderWeChat | Promise<ViewObject> |    (json: string)    | 传入特定格式的json，返回一个ViewObject对象 微信小程序 canvas 2d   |\r\n|useGetViewObject | Promise<ViewObject> |    (id: string)    |  通过id获取ViewObject对象    |\r\n\r\n\r\n### do系列\r\n- 需要做一些操作? 交给它们\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|doSelect | - |    (view?: ViewObject, target?: Gesti)    |  选中传入对象  |\r\n|doRotate | - |     (angle: number, existing?: boolean, view?: ViewObject, target?: Gesti)    |  旋转一个对象，不传入view默认当前选中对象  |\r\n|doPosition | - |     (x: number, x: number, view?: ViewObject, target?: Gesti)    |  设置一个对象的位置，不传入view默认当前选中对象  |\r\n|doCleanAll | - |    (view?: ViewObject, target?: Gesti)    |  画布内清空所有元素  |\r\n|doLayerLower | - |    (view?: ViewObject, target?: Gesti)    |  所在图层向下一层  |\r\n|doLayerRise | - |    (view?: ViewObject, target?: Gesti)    |  所在图层向上一层  |\r\n|doLayerTop | - |    (view?: ViewObject, target?: Gesti)    |  置于顶层  |\r\n|doLayerBottom | - |    (view?: ViewObject, target?: Gesti)    |  置于底层  |\r\n|doLock | - |    (view?: ViewObject, target?: Gesti)    |  锁住对象  |\r\n|doUnLock | - |    (view?: ViewObject, target?: Gesti)    |  解锁对象  |\r\n|doUpward | - |    (view?: ViewObject, target?: Gesti)    |  位置微调，上一个单位  |\r\n|doDownward | - |    (view?: ViewObject, target?: Gesti)    |  位置微调，下一个单位 |\r\n|doLeftward | - |    (view?: ViewObject, target?: Gesti)    |   位置微调，左一个单位  |\r\n|doRightward | - |    (view?: ViewObject, target?: Gesti)    |  位置微调，右一个单位  |\r\n|doCenter | - |   (view?: ViewObject, axis?: CenterAxis, target?: Gesti)    |  居中，可选水平或者垂直，不填就垂直水平居中  |\r\n|doCancel | - |    (view?: ViewObject, target?: Gesti)    |  取消选中单个/现在被选中的对象  |\r\n|doCancelAll | - |    -    |  取消所有被选中对象  |\r\n|doUpdate | - |    -    |  手动刷新画布  |\r\n|doCancelEvent | - |    -    |  取消原有画布事件代理,调用该方法后需要自定调用drive系列Hook,否则Gesti无法监听到您的手指/鼠标的位置  |\r\n\r\n\r\n### drive系列\r\n- 自定义鼠标/手指事件代理\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|driveMove | - |   (e:Event)    |  鼠标/手指移动时  |\r\n|driveUp | - |   (e:Event)    |  鼠标/手指抬起时  |\r\n|driveDown | - |   (e:Event)    |  鼠标/手指放下时  |\r\n|driveWheel | - |   (e:Event)    |  鼠标滚轮时  |\r\n\r\n\r\n### 尺寸适配\r\n- 物理单位转换像素  此处dpi取96   \r\n- 值得注意:Gesti内没有一个标准的单位，所有的单位都由您决定，比如画布创建设置大小时，图片创建传入时，字体设置大小时。总之，您输入多大，Gesti就为您显示多大（比如输入图片高宽为物理单位一厘米，那么在Gesti内您所看到的图片大小也会是一厘米高宽）\r\n- 以下提供的方法仅供参考，如需更精准的方案您可以自己实现。\r\n\r\n| Hook      | 返回值类型         |    参数    |   说明   |\r\n| :---       |    :----:         |  :----:   |   :----: |\r\n|mmToIn       | number          |   (mm:number)    |  毫米转换为英寸  |\r\n|inToPx       |number            |  (inch:number)    | 英寸转换为像素  |\r\n|ptToPx       | number             |   (pt:number)    | 英榜转换为像素（一般设置字体时用它）  |\r\n\r\n\r\n\r\n\r\n# 保存\r\n\r\n- 该库只是为您提供了canvas的代理操作，并没有改变canvas的任何原有API，所以您可以使用canvas自带的API进行存储。\r\n\r\n# 可能会遇到的问题\r\n- 图片导入不出现？数据变了图片没动？试试update方法刷新一下。\r\n- hooks和普通模式有啥区别吗? 个人认为Hooks更适合FP爱好者，普通模式适合OOP爱好者。\r\n- 图片 | 文字上没有可以直接操作的按钮吗？ 有,不过需要您自己new成按钮对象安装上去。\r\n- 为什么路由切换后再返回页面会发生报错？重新init一下，记得controller也要重新赋值。\r\n- 其他问题可以加下面QQ群\r\n- Demo下载地址:  https://ext.dcloud.net.cn/plugin?id=10867 \r\n\r\n# 示例\r\n\r\n***用它，没有多麻烦。***\r\n\r\n####  HTML\r\n\r\n\t<canvas id=\"canvas\" width=\"300\" height=\"300\"></canvas>\r\n\r\n#### JavaScript\r\n\r\n    const canvas = document.querySelector(\"canvas\");\r\n    const renderContext= canvas.getContext(\"2d\");\r\n    const [gesti,controller]=Gesti.mount({\r\n        renderContext,\r\n        rect:{\r\n          canvasWidth:canvas.width,\r\n          canvasHeight:canvas.height\r\n        }\r\n    });\r\n    controller.load(new Text(`New Text.\r\n      新建文本`))\r\n\r\n\r\n\r\n***不是吗？***\r\n\r\n\r\n### 需要帮助？\r\n\r\n- 添加QQ群聊(Gesti交流群),我们讨论一下问题  756829516 ","readmeFilename":"README.md","description":"一个运行飞快的前端Canvas贴图工具","keywords":["图片贴图","图文编辑","Picture editor","Sticker","图片拖拽缩放","Typescript","微信小程序贴纸编辑","React Sticker","Vue Sticker"],"homepage":"https://github.com/AK1118/Gesti#readme","repository":{"type":"git","url":"git+https://github.com/AK1118/Gesti.git"},"bugs":{"url":"https://github.com/AK1118/Gesti/issues"},"users":{"ak1118":true},"author":{"name":"AK1118"}}