@atomicservice/as-icon-generator 1.0.12 → 1.0.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -8,17 +8,4 @@ npm install @atomicservice/as-icon-generator
8
8
 
9
9
  ## 使用指南
10
10
 
11
- ```
12
- import { AsIconGenerator } from '@atomicservice/as-icon-generator';
13
-
14
- const asIconGenerator = new AsIconGenerator({ srcImage })
15
-
16
- // 获取颜色
17
- const colors = await asIconGenerator.getColors();
18
- asIconGenerator.setColor(colors[0]);
19
-
20
- // 生成图片, agc: true 表示同时生成agc中使用的图标
21
- const result = await asIconGenerator.generate({ agc: true })
22
- // result.outputImage
23
- // result.agcImage
24
- ```
11
+ 详细文档请查看:[睫毛图工具](https://developer.huawei.com/consumer/cn/doc/atomic-ascf/ascf-assistant#section8924826104714)
package/dist/index.d.mts CHANGED
@@ -3,7 +3,7 @@ declare class IconMaker {
3
3
  private eventHandlers;
4
4
  on(event: string, cb: any): void;
5
5
  emit(event: string, ...args: any[]): void;
6
- setSrc(imgUrl: string): Promise<HTMLImageElement>;
6
+ setSrc(imgUrl: string | HTMLImageElement, crossOrigin: string): Promise<HTMLImageElement>;
7
7
  hasSrc(): boolean;
8
8
  make(selectedColor: string): Promise<{
9
9
  preview512: HTMLCanvasElement;
@@ -13,6 +13,7 @@ declare class IconMaker {
13
13
 
14
14
  declare class AsIconGenerator {
15
15
  private srcImg;
16
+ private crossOrigin;
16
17
  private selectedColor;
17
18
  maker: IconMaker;
18
19
  constructor(options: any);
package/dist/index.d.ts CHANGED
@@ -3,7 +3,7 @@ declare class IconMaker {
3
3
  private eventHandlers;
4
4
  on(event: string, cb: any): void;
5
5
  emit(event: string, ...args: any[]): void;
6
- setSrc(imgUrl: string): Promise<HTMLImageElement>;
6
+ setSrc(imgUrl: string | HTMLImageElement, crossOrigin: string): Promise<HTMLImageElement>;
7
7
  hasSrc(): boolean;
8
8
  make(selectedColor: string): Promise<{
9
9
  preview512: HTMLCanvasElement;
@@ -13,6 +13,7 @@ declare class IconMaker {
13
13
 
14
14
  declare class AsIconGenerator {
15
15
  private srcImg;
16
+ private crossOrigin;
16
17
  private selectedColor;
17
18
  maker: IconMaker;
18
19
  constructor(options: any);
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var W=Object.defineProperty;var B=Object.getOwnPropertyDescriptor;var V=Object.getOwnPropertyNames;var q=Object.prototype.hasOwnProperty;var U=(r,n)=>{for(var o in n)W(r,o,{get:n[o],enumerable:!0})},X=(r,n,o,a)=>{if(n&&typeof n=="object"||typeof n=="function")for(let l of V(n))!q.call(r,l)&&l!==o&&W(r,l,{get:()=>n[l],enumerable:!(a=B(n,l))||a.enumerable});return r};var F=r=>X(W({},"__esModule",{value:!0}),r);var ut={};U(ut,{AsIconGenerator:()=>R});module.exports=F(ut);var j=({red:r,green:n,blue:o})=>{let a=r/255,l=n/255,e=o/255,t=Math.max(a,l,e),c=Math.min(a,l,e),s=0,E=0,u=(t+c)/2;if(t===c)s=0,E=0;else{let _=t-c;E=u>.5?_/(2-t-c):_/(t+c),Math.abs(t-a)<=Number.EPSILON?s=(l-e)/_+(l<e?6:0):Math.abs(t-l)<=Number.EPSILON?s=(e-a)/_+2:Math.abs(t-e)<=Number.EPSILON&&(s=(a-l)/_+4),s/=6}return[s*360,E*100,u*100]};function Q({x:r,y:n,r:o,ctx:a}){a.beginPath(),a.arc(r,n,o,0,Math.PI*2,!1),a.closePath()}var J=(r,n)=>new Promise(o=>{let a=new Image;a.onload=()=>{o(a);let l=Math.max(a.width,a.height),e=n/l;a.width=a.width*e,a.height=a.height*e},a.src=r}),T=r=>{let n=r?.getContext("2d");return n?(n.imageSmoothingEnabled=!0,n.imageSmoothingQuality="high",n):null},K=async(r,n)=>{let o=T(n);o&&(o.clearRect(0,0,512,512),n.width=512,nt(n),o.drawImage(r,n.width/2-r.width/2,n.height/2-r.height/2,358,358))},Z=({centerX:r,centerY:n,r:o,thetaDegrees:a})=>{let l=a*(Math.PI/180),e=r+o*Math.cos(l),t=n+o*Math.sin(l);return{x:e,y:t}},$=({ctx:r,degrees:n,color:o})=>{let{x:a,y:l}=Z({centerX:256,centerY:256,r:230,thetaDegrees:n});r.beginPath(),r.arc(a,l,38/2,0,2*Math.PI,!1),r.fillStyle=o,r.fill(),r.closePath()},tt=async r=>{let n=({x:h,y:I})=>{let m=h-179,g=I-358/2,C=Math.sqrt(m*m+g*g);return Math.abs(E-C)<=2},o=document.createElement("canvas");o.width=358,o.height=358;let a=T(o);if(!a)return 2;a.drawImage(r,0,0,358,358);let l=a.getImageData(0,0,358,358),e=l.data,t=0,c=0,s=0,E=358/2,u=e.length;for(let h=0;h<u;h+=4){let I=h/4%358,m=Math.floor(h/4/358);if(n({x:I,y:m})){let[,g,C]=j({red:e[h],green:e[h+1],blue:e[h+2]}),p=g>=0&&g<=2&&C>=96&&C<=100,f=g>=0&&g<=100&&C>=0&&C<=8;s+=1,t+=p?1:0,c+=f?1:0}}let _=s*.01;return a.putImageData(l,0,0),c>=_&&t>=_||s>=2*(t+c)?2:s-c<=_?1:s-t<=_?0:2},P=({ctx:r,color:n})=>{r.beginPath();let o=358/2-6/2+1;r.lineWidth=6,r.strokeStyle=n,r.arc(256,256,o,0,2*Math.PI,!1),r.stroke(),r.closePath()},et=({canvas:r,color:n,borderType:o})=>{let a=T(r);if(!a||(a.clearRect(0,0,512,512),r.width=512,!n))return;a.beginPath();let l=38+358/2+26/2;a.lineCap="round",a.lineWidth=26,a.strokeStyle=n,a.arc(256,256,l,0,Math.PI,!1),a.stroke(),a.closePath();for(let e=1;e<=9;e++)$({ctx:a,degrees:180+18*e,color:n});if(n.toUpperCase()==="#E5E5E5"||n.toUpperCase()==="#2E2E2E"){P({ctx:a,color:n});return}o!==2&&P({ctx:a,color:o===0?"#E5E5E5":"#2E2E2E"})},nt=async r=>{let n=T(r);n&&(n.clearRect(0,0,512,512),Q({x:256,y:256,r:358/2,ctx:n}),n.clip())};function rt(r,n,o){let a=T(r);if(a===null)return"";let l=[n,o];for(let e=0;e<l.length;e++)a.drawImage(l[e],0,0);return r}var D=class{constructor(){this.srcImg=null;this.eventHandlers={}}on(n,o){this.eventHandlers[n]||(this.eventHandlers[n]=[]),this.eventHandlers[n].push(o)}emit(n,...o){this.eventHandlers[n]?.forEach(a=>a?.(...o))}async setSrc(n){return J(n,358).then(o=>(this.srcImg=o,this.emit("imgLoaded",o),o))}hasSrc(){return!!this.srcImg}async make(n){if(!this.srcImg)throw new Error("src img is not ready");let o=this.srcImg,a=await tt(o),l=512,e=216,t=O(l,l),c=O(l,l);K(o,t),et({canvas:c,color:n,borderType:a});let s=O(l,l);rt(s,t,c);let E=O(e,e);return T(E).drawImage(s,0,0,l,l,0,0,e,e),{preview512:s,preview216:E}}};function O(r,n){let o=document.createElement("canvas");return o.width=r,o.height=n,o}var y=function(r,n){return r<n?-1:r>n?1:0},k=function(r){return r.reduce(function(n,o){return n+o},0)},ot=(function(){function r(o){this.colors=o}var n=r.prototype;return n.palette=function(){return this.colors},n.map=function(o){return o},r})(),at=(function(){function r(e,t,c){return(e<<10)+(t<<5)+c}function n(e){var t=[],c=!1;function s(){t.sort(e),c=!0}return{push:function(E){t.push(E),c=!1},peek:function(E){return c||s(),E===void 0&&(E=t.length-1),t[E]},pop:function(){return c||s(),t.pop()},size:function(){return t.length},map:function(E){return t.map(E)},debug:function(){return c||s(),t}}}function o(e,t,c,s,E,u,_){var h=this;h.r1=e,h.r2=t,h.g1=c,h.g2=s,h.b1=E,h.b2=u,h.histo=_}function a(){this.vboxes=new n(function(e,t){return y(e.vbox.count()*e.vbox.volume(),t.vbox.count()*t.vbox.volume())})}function l(e,t){if(t.count()){var c=t.r2-t.r1+1,s=t.g2-t.g1+1,E=Math.max.apply(null,[c,s,t.b2-t.b1+1]);if(t.count()==1)return[t.copy()];var u,_,h,I,m=0,g=[],C=[];if(E==c)for(u=t.r1;u<=t.r2;u++){for(I=0,_=t.g1;_<=t.g2;_++)for(h=t.b1;h<=t.b2;h++)I+=e[r(u,_,h)]||0;g[u]=m+=I}else if(E==s)for(u=t.g1;u<=t.g2;u++){for(I=0,_=t.r1;_<=t.r2;_++)for(h=t.b1;h<=t.b2;h++)I+=e[r(_,u,h)]||0;g[u]=m+=I}else for(u=t.b1;u<=t.b2;u++){for(I=0,_=t.r1;_<=t.r2;_++)for(h=t.g1;h<=t.g2;h++)I+=e[r(_,h,u)]||0;g[u]=m+=I}return g.forEach(function(p,f){C[f]=m-p}),(function(p){var f,v,H,A,d,b=p+"1",N=p+"2",S=0;for(u=t[b];u<=t[N];u++)if(g[u]>m/2){for(H=t.copy(),A=t.copy(),d=(f=u-t[b])<=(v=t[N]-u)?Math.min(t[N]-1,~~(u+v/2)):Math.max(t[b],~~(u-1-f/2));!g[d];)d++;for(S=C[d];!S&&g[d-1];)S=C[--d];return H[N]=d,A[b]=H[N]+1,[H,A]}})(E==c?"r":E==s?"g":"b")}}return o.prototype={volume:function(e){var t=this;return t._volume&&!e||(t._volume=(t.r2-t.r1+1)*(t.g2-t.g1+1)*(t.b2-t.b1+1)),t._volume},count:function(e){var t=this,c=t.histo;if(!t._count_set||e){var s,E,u,_=0;for(s=t.r1;s<=t.r2;s++)for(E=t.g1;E<=t.g2;E++)for(u=t.b1;u<=t.b2;u++)_+=c[r(s,E,u)]||0;t._count=_,t._count_set=!0}return t._count},copy:function(){var e=this;return new o(e.r1,e.r2,e.g1,e.g2,e.b1,e.b2,e.histo)},avg:function(e){var t=this,c=t.histo;if(!t._avg||e){var s,E,u,_,h=0,I=0,m=0,g=0;if(t.r1===t.r2&&t.g1===t.g2&&t.b1===t.b2)t._avg=[t.r1<<3,t.g1<<3,t.b1<<3];else{for(E=t.r1;E<=t.r2;E++)for(u=t.g1;u<=t.g2;u++)for(_=t.b1;_<=t.b2;_++)h+=s=c[r(E,u,_)]||0,I+=s*(E+.5)*8,m+=s*(u+.5)*8,g+=s*(_+.5)*8;t._avg=h?[~~(I/h),~~(m/h),~~(g/h)]:[~~(8*(t.r1+t.r2+1)/2),~~(8*(t.g1+t.g2+1)/2),~~(8*(t.b1+t.b2+1)/2)]}}return t._avg},contains:function(e){var t=this,c=e[0]>>3;return gval=e[1]>>3,bval=e[2]>>3,c>=t.r1&&c<=t.r2&&gval>=t.g1&&gval<=t.g2&&bval>=t.b1&&bval<=t.b2}},a.prototype={push:function(e){this.vboxes.push({vbox:e,color:e.avg()})},palette:function(){return this.vboxes.map(function(e){return e.color})},size:function(){return this.vboxes.size()},map:function(e){for(var t=this.vboxes,c=0;c<t.size();c++)if(t.peek(c).vbox.contains(e))return t.peek(c).color;return this.nearest(e)},nearest:function(e){for(var t,c,s,E=this.vboxes,u=0;u<E.size();u++)((c=Math.sqrt(Math.pow(e[0]-E.peek(u).color[0],2)+Math.pow(e[1]-E.peek(u).color[1],2)+Math.pow(e[2]-E.peek(u).color[2],2)))<t||t===void 0)&&(t=c,s=E.peek(u).color);return s},forcebw:function(){var e=this.vboxes;e.sort(function(E,u){return y(k(E.color),k(u.color))});var t=e[0].color;t[0]<5&&t[1]<5&&t[2]<5&&(e[0].color=[0,0,0]);var c=e.length-1,s=e[c].color;s[0]>251&&s[1]>251&&s[2]>251&&(e[c].color=[255,255,255])}},{quantize:function(e,t){if(!Number.isInteger(t)||t<1||t>256)throw new Error("Invalid maximum color count. It must be an integer between 1 and 256.");if(!e.length||t<2||t>256||!e.length||t<2||t>256)return!1;for(var c=[],s=new Set,E=0;E<e.length;E++){var u=e[E],_=u.join(",");s.has(_)||(s.add(_),c.push(u))}if(c.length<=t)return new ot(c);var h=(function(f){var v,H=new Array(32768);return f.forEach(function(A){v=r(A[0]>>3,A[1]>>3,A[2]>>3),H[v]=(H[v]||0)+1}),H})(e);h.forEach(function(){});var I=(function(f,v){var H,A,d,b=1e6,N=0,S=1e6,Y=0,w=1e6,M=0;return f.forEach(function(x){(H=x[0]>>3)<b?b=H:H>N&&(N=H),(A=x[1]>>3)<S?S=A:A>Y&&(Y=A),(d=x[2]>>3)<w?w=d:d>M&&(M=d)}),new o(b,N,S,Y,w,M,v)})(e,h),m=new n(function(f,v){return y(f.count(),v.count())});function g(f,v){for(var H,A=f.size(),d=0;d<1e3;){if(A>=v||d++>1e3)return;if((H=f.pop()).count()){var b=l(h,H),N=b[0],S=b[1];if(!N)return;f.push(N),S&&(f.push(S),A++)}else f.push(H),d++}}m.push(I),g(m,.75*t);for(var C=new n(function(f,v){return y(f.count()*f.volume(),v.count()*v.volume())});m.size();)C.push(m.pop());g(C,t);for(var p=new a;C.size();)p.push(C.pop());return p}}})().quantize,G=function(r){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.width=this.canvas.width=r.naturalWidth,this.height=this.canvas.height=r.naturalHeight,this.context.drawImage(r,0,0,this.width,this.height)};G.prototype.getImageData=function(){return this.context.getImageData(0,0,this.width,this.height)};var L=function(){};L.prototype.getColor=function(r,n){return n===void 0&&(n=10),this.getPalette(r,5,n)[0]},L.prototype.getPalette=function(r,n,o){var a=(function(c){var s=c.colorCount,E=c.quality;if(s!==void 0&&Number.isInteger(s)){if(s===1)throw new Error("colorCount should be between 2 and 20. To get one color, call getColor() instead of getPalette()");s=Math.max(s,2),s=Math.min(s,20)}else s=10;return(E===void 0||!Number.isInteger(E)||E<1)&&(E=10),{colorCount:s,quality:E}})({colorCount:n,quality:o}),l=new G(r),e=(function(c,s,E){for(var u,_,h,I,m,g=c,C=[],p=0;p<s;p+=E)_=g[0+(u=4*p)],h=g[u+1],I=g[u+2],((m=g[u+3])===void 0||m>=125)&&(_>250&&h>250&&I>250||C.push([_,h,I]));return C})(l.getImageData().data,l.width*l.height,a.quality),t=at(e,a.colorCount);return t?t.palette():null},L.prototype.getColorFromUrl=function(r,n,o){var a=this,l=document.createElement("img");l.addEventListener("load",function(){var e=a.getPalette(l,5,o);n(e[0],r)}),l.src=r},L.prototype.getImageData=function(r,n){var o=new XMLHttpRequest;o.open("GET",r,!0),o.responseType="arraybuffer",o.onload=function(){if(this.status==200){var a=new Uint8Array(this.response);i=a.length;for(var l=new Array(i),e=0;e<a.length;e++)l[e]=String.fromCharCode(a[e]);var t=l.join(""),c=window.btoa(t);n("data:image/png;base64,"+c)}},o.send()},L.prototype.getColorAsync=function(r,n,o){var a=this;this.getImageData(r,function(l){var e=document.createElement("img");e.addEventListener("load",function(){var t=a.getPalette(e,5,o);n(t[0],this)}),e.src=l})};function it(r,n,o){r/=255,n/=255,o/=255;let a=Math.max(r,n,o),l=Math.min(r,n,o),e=a-l,t=0;e!==0&&(a===r?t=(n-o)/e%6:a===n?t=(o-r)/e+2:t=(r-n)/e+4,t*=60,t<0&&(t+=360));let c=a===0?0:e/a;return{h:t,s:c,v:a}}function st(r){return"#"+r.map(n=>n.toString(16).padStart(2,"0")).join("")}function ct(r){let{s:n,v:o}=it(r[0],r[1],r[2]);return n<=.02&&o>=.96?[229,229,229]:o<=.08?[46,46,46]:st(r)}async function z(r){return(await new L().getPalette(r,5)).map(ct).filter((l,e,t)=>t.indexOf(l)===e).slice(0,3)}var R=class{constructor(n){this.srcImg=null;this.selectedColor="";this.maker=new D;this.srcImg=n.srcImg}async getColors(){let n=[];if(!this.srcImg)throw new Error("srcImg is null");return this.maker.on("imgLoaded",o=>{z(o).then(a=>{n=a,this.selectedColor=a[0]})}),await this.maker.setSrc(this.srcImg),n}setColor(n){this.selectedColor=n}async generate(n){let o={outputImage:"",agcImage:""};return this.maker.hasSrc()&&this.selectedColor&&await this.maker.make(this.selectedColor).then(({preview512:a,preview216:l})=>{n?.agc&&(o.agcImage=l.toDataURL("image/png")),o.outputImage=a.toDataURL("image/png")}),o}};0&&(module.exports={AsIconGenerator});
1
+ "use strict";var W=Object.defineProperty;var B=Object.getOwnPropertyDescriptor;var V=Object.getOwnPropertyNames;var q=Object.prototype.hasOwnProperty;var X=(r,e)=>{for(var o in e)W(r,o,{get:e[o],enumerable:!0})},U=(r,e,o,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of V(e))!q.call(r,s)&&s!==o&&W(r,s,{get:()=>e[s],enumerable:!(a=B(e,s))||a.enumerable});return r};var F=r=>U(W({},"__esModule",{value:!0}),r);var lt={};X(lt,{AsIconGenerator:()=>R});module.exports=F(lt);var j=({red:r,green:e,blue:o})=>{let a=r/255,s=e/255,n=o/255,t=Math.max(a,s,n),u=Math.min(a,s,n),c=0,E=0,l=(t+u)/2;if(t===u)c=0,E=0;else{let g=t-u;E=l>.5?g/(2-t-u):g/(t+u),Math.abs(t-a)<=Number.EPSILON?c=(s-n)/g+(s<n?6:0):Math.abs(t-s)<=Number.EPSILON?c=(n-a)/g+2:Math.abs(t-n)<=Number.EPSILON&&(c=(a-s)/g+4),c/=6}return[c*360,E*100,l*100]};function Q({x:r,y:e,r:o,ctx:a}){a.beginPath(),a.arc(r,e,o,0,Math.PI*2,!1),a.closePath()}var J=(r,e)=>new Promise(o=>{r.onload=()=>{o(r);let a=Math.max(r.width,r.height),s=e/a;r.width=r.width*s,r.height=r.height*s}}),K=(r,e,o)=>new Promise(a=>{let s=new Image;s.onload=()=>{a(s);let n=Math.max(s.width,s.height),t=e/n;s.width=s.width*t,s.height=s.height*t},s.crossOrigin=o,s.src=r}),T=r=>{let e=r?.getContext("2d");return e?(e.imageSmoothingEnabled=!0,e.imageSmoothingQuality="high",e):null},Z=async(r,e)=>{let o=T(e);o&&(o.clearRect(0,0,512,512),e.width=512,rt(e),o.drawImage(r,e.width/2-r.width/2,e.height/2-r.height/2,358,358))},$=({centerX:r,centerY:e,r:o,thetaDegrees:a})=>{let s=a*(Math.PI/180),n=r+o*Math.cos(s),t=e+o*Math.sin(s);return{x:n,y:t}},tt=({ctx:r,degrees:e,color:o})=>{let{x:a,y:s}=$({centerX:256,centerY:256,r:230,thetaDegrees:e});r.beginPath(),r.arc(a,s,38/2,0,2*Math.PI,!1),r.fillStyle=o,r.fill(),r.closePath()},et=async r=>{let e=({x:h,y:I})=>{let m=h-179,_=I-358/2,C=Math.sqrt(m*m+_*_);return Math.abs(E-C)<=2},o=document.createElement("canvas");o.width=358,o.height=358;let a=T(o);if(!a)return 2;a.drawImage(r,0,0,358,358);let s=a.getImageData(0,0,358,358),n=s.data,t=0,u=0,c=0,E=358/2,l=n.length;for(let h=0;h<l;h+=4){let I=h/4%358,m=Math.floor(h/4/358);if(e({x:I,y:m})){let[,_,C]=j({red:n[h],green:n[h+1],blue:n[h+2]}),p=_>=0&&_<=2&&C>=96&&C<=100,f=_>=0&&_<=100&&C>=0&&C<=8;c+=1,t+=p?1:0,u+=f?1:0}}let g=c*.01;return a.putImageData(s,0,0),u>=g&&t>=g||c>=2*(t+u)?2:c-u<=g?1:c-t<=g?0:2},P=({ctx:r,color:e})=>{r.beginPath();let o=358/2-6/2+1;r.lineWidth=6,r.strokeStyle=e,r.arc(256,256,o,0,2*Math.PI,!1),r.stroke(),r.closePath()},nt=({canvas:r,color:e,borderType:o})=>{let a=T(r);if(!a||(a.clearRect(0,0,512,512),r.width=512,!e))return;a.beginPath();let s=38+358/2+26/2;a.lineCap="round",a.lineWidth=26,a.strokeStyle=e,a.arc(256,256,s,0,Math.PI,!1),a.stroke(),a.closePath();for(let n=1;n<=9;n++)tt({ctx:a,degrees:180+18*n,color:e});if(e.toUpperCase()==="#E5E5E5"||e.toUpperCase()==="#2E2E2E"){P({ctx:a,color:e});return}o!==2&&P({ctx:a,color:o===0?"#E5E5E5":"#2E2E2E"})},rt=async r=>{let e=T(r);e&&(e.clearRect(0,0,512,512),Q({x:256,y:256,r:358/2,ctx:e}),e.clip())};function ot(r,e,o){let a=T(r);if(a===null)return"";let s=[e,o];for(let n=0;n<s.length;n++)a.drawImage(s[n],0,0);return r}var D=class{constructor(){this.srcImg=null;this.eventHandlers={}}on(e,o){this.eventHandlers[e]||(this.eventHandlers[e]=[]),this.eventHandlers[e].push(o)}emit(e,...o){this.eventHandlers[e]?.forEach(a=>a?.(...o))}async setSrc(e,o){return e instanceof HTMLImageElement?J(e,358).then(a=>(this.srcImg=a,this.emit("imgLoaded",a),a)):K(e,358,o).then(a=>(this.srcImg=a,this.emit("imgLoaded",a),a))}hasSrc(){return!!this.srcImg}async make(e){if(!this.srcImg)throw new Error("src img is not ready");let o=this.srcImg,a=await et(o),s=512,n=216,t=O(s,s),u=O(s,s);Z(o,t),nt({canvas:u,color:e,borderType:a});let c=O(s,s);ot(c,t,u);let E=O(n,n);return T(E).drawImage(c,0,0,s,s,0,0,n,n),{preview512:c,preview216:E}}};function O(r,e){let o=document.createElement("canvas");return o.width=r,o.height=e,o}var M=function(r,e){return r<e?-1:r>e?1:0},k=function(r){return r.reduce(function(e,o){return e+o},0)},at=(function(){function r(o){this.colors=o}var e=r.prototype;return e.palette=function(){return this.colors},e.map=function(o){return o},r})(),it=(function(){function r(n,t,u){return(n<<10)+(t<<5)+u}function e(n){var t=[],u=!1;function c(){t.sort(n),u=!0}return{push:function(E){t.push(E),u=!1},peek:function(E){return u||c(),E===void 0&&(E=t.length-1),t[E]},pop:function(){return u||c(),t.pop()},size:function(){return t.length},map:function(E){return t.map(E)},debug:function(){return u||c(),t}}}function o(n,t,u,c,E,l,g){var h=this;h.r1=n,h.r2=t,h.g1=u,h.g2=c,h.b1=E,h.b2=l,h.histo=g}function a(){this.vboxes=new e(function(n,t){return M(n.vbox.count()*n.vbox.volume(),t.vbox.count()*t.vbox.volume())})}function s(n,t){if(t.count()){var u=t.r2-t.r1+1,c=t.g2-t.g1+1,E=Math.max.apply(null,[u,c,t.b2-t.b1+1]);if(t.count()==1)return[t.copy()];var l,g,h,I,m=0,_=[],C=[];if(E==u)for(l=t.r1;l<=t.r2;l++){for(I=0,g=t.g1;g<=t.g2;g++)for(h=t.b1;h<=t.b2;h++)I+=n[r(l,g,h)]||0;_[l]=m+=I}else if(E==c)for(l=t.g1;l<=t.g2;l++){for(I=0,g=t.r1;g<=t.r2;g++)for(h=t.b1;h<=t.b2;h++)I+=n[r(g,l,h)]||0;_[l]=m+=I}else for(l=t.b1;l<=t.b2;l++){for(I=0,g=t.r1;g<=t.r2;g++)for(h=t.g1;h<=t.g2;h++)I+=n[r(g,h,l)]||0;_[l]=m+=I}return _.forEach(function(p,f){C[f]=m-p}),(function(p){var f,v,H,A,d,b=p+"1",N=p+"2",L=0;for(l=t[b];l<=t[N];l++)if(_[l]>m/2){for(H=t.copy(),A=t.copy(),d=(f=l-t[b])<=(v=t[N]-l)?Math.min(t[N]-1,~~(l+v/2)):Math.max(t[b],~~(l-1-f/2));!_[d];)d++;for(L=C[d];!L&&_[d-1];)L=C[--d];return H[N]=d,A[b]=H[N]+1,[H,A]}})(E==u?"r":E==c?"g":"b")}}return o.prototype={volume:function(n){var t=this;return t._volume&&!n||(t._volume=(t.r2-t.r1+1)*(t.g2-t.g1+1)*(t.b2-t.b1+1)),t._volume},count:function(n){var t=this,u=t.histo;if(!t._count_set||n){var c,E,l,g=0;for(c=t.r1;c<=t.r2;c++)for(E=t.g1;E<=t.g2;E++)for(l=t.b1;l<=t.b2;l++)g+=u[r(c,E,l)]||0;t._count=g,t._count_set=!0}return t._count},copy:function(){var n=this;return new o(n.r1,n.r2,n.g1,n.g2,n.b1,n.b2,n.histo)},avg:function(n){var t=this,u=t.histo;if(!t._avg||n){var c,E,l,g,h=0,I=0,m=0,_=0;if(t.r1===t.r2&&t.g1===t.g2&&t.b1===t.b2)t._avg=[t.r1<<3,t.g1<<3,t.b1<<3];else{for(E=t.r1;E<=t.r2;E++)for(l=t.g1;l<=t.g2;l++)for(g=t.b1;g<=t.b2;g++)h+=c=u[r(E,l,g)]||0,I+=c*(E+.5)*8,m+=c*(l+.5)*8,_+=c*(g+.5)*8;t._avg=h?[~~(I/h),~~(m/h),~~(_/h)]:[~~(8*(t.r1+t.r2+1)/2),~~(8*(t.g1+t.g2+1)/2),~~(8*(t.b1+t.b2+1)/2)]}}return t._avg},contains:function(n){var t=this,u=n[0]>>3;return gval=n[1]>>3,bval=n[2]>>3,u>=t.r1&&u<=t.r2&&gval>=t.g1&&gval<=t.g2&&bval>=t.b1&&bval<=t.b2}},a.prototype={push:function(n){this.vboxes.push({vbox:n,color:n.avg()})},palette:function(){return this.vboxes.map(function(n){return n.color})},size:function(){return this.vboxes.size()},map:function(n){for(var t=this.vboxes,u=0;u<t.size();u++)if(t.peek(u).vbox.contains(n))return t.peek(u).color;return this.nearest(n)},nearest:function(n){for(var t,u,c,E=this.vboxes,l=0;l<E.size();l++)((u=Math.sqrt(Math.pow(n[0]-E.peek(l).color[0],2)+Math.pow(n[1]-E.peek(l).color[1],2)+Math.pow(n[2]-E.peek(l).color[2],2)))<t||t===void 0)&&(t=u,c=E.peek(l).color);return c},forcebw:function(){var n=this.vboxes;n.sort(function(E,l){return M(k(E.color),k(l.color))});var t=n[0].color;t[0]<5&&t[1]<5&&t[2]<5&&(n[0].color=[0,0,0]);var u=n.length-1,c=n[u].color;c[0]>251&&c[1]>251&&c[2]>251&&(n[u].color=[255,255,255])}},{quantize:function(n,t){if(!Number.isInteger(t)||t<1||t>256)throw new Error("Invalid maximum color count. It must be an integer between 1 and 256.");if(!n.length||t<2||t>256||!n.length||t<2||t>256)return!1;for(var u=[],c=new Set,E=0;E<n.length;E++){var l=n[E],g=l.join(",");c.has(g)||(c.add(g),u.push(l))}if(u.length<=t)return new at(u);var h=(function(f){var v,H=new Array(32768);return f.forEach(function(A){v=r(A[0]>>3,A[1]>>3,A[2]>>3),H[v]=(H[v]||0)+1}),H})(n);h.forEach(function(){});var I=(function(f,v){var H,A,d,b=1e6,N=0,L=1e6,w=0,y=1e6,Y=0;return f.forEach(function(x){(H=x[0]>>3)<b?b=H:H>N&&(N=H),(A=x[1]>>3)<L?L=A:A>w&&(w=A),(d=x[2]>>3)<y?y=d:d>Y&&(Y=d)}),new o(b,N,L,w,y,Y,v)})(n,h),m=new e(function(f,v){return M(f.count(),v.count())});function _(f,v){for(var H,A=f.size(),d=0;d<1e3;){if(A>=v||d++>1e3)return;if((H=f.pop()).count()){var b=s(h,H),N=b[0],L=b[1];if(!N)return;f.push(N),L&&(f.push(L),A++)}else f.push(H),d++}}m.push(I),_(m,.75*t);for(var C=new e(function(f,v){return M(f.count()*f.volume(),v.count()*v.volume())});m.size();)C.push(m.pop());_(C,t);for(var p=new a;C.size();)p.push(C.pop());return p}}})().quantize,G=function(r){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.width=this.canvas.width=r.naturalWidth,this.height=this.canvas.height=r.naturalHeight,this.context.drawImage(r,0,0,this.width,this.height)};G.prototype.getImageData=function(){return this.context.getImageData(0,0,this.width,this.height)};var S=function(){};S.prototype.getColor=function(r,e){return e===void 0&&(e=10),this.getPalette(r,5,e)[0]},S.prototype.getPalette=function(r,e,o){var a=(function(u){var c=u.colorCount,E=u.quality;if(c!==void 0&&Number.isInteger(c)){if(c===1)throw new Error("colorCount should be between 2 and 20. To get one color, call getColor() instead of getPalette()");c=Math.max(c,2),c=Math.min(c,20)}else c=10;return(E===void 0||!Number.isInteger(E)||E<1)&&(E=10),{colorCount:c,quality:E}})({colorCount:e,quality:o}),s=new G(r),n=(function(u,c,E){for(var l,g,h,I,m,_=u,C=[],p=0;p<c;p+=E)g=_[0+(l=4*p)],h=_[l+1],I=_[l+2],((m=_[l+3])===void 0||m>=125)&&(g>250&&h>250&&I>250||C.push([g,h,I]));return C})(s.getImageData().data,s.width*s.height,a.quality),t=it(n,a.colorCount);return t?t.palette():null},S.prototype.getColorFromUrl=function(r,e,o){var a=this,s=document.createElement("img");s.addEventListener("load",function(){var n=a.getPalette(s,5,o);e(n[0],r)}),s.src=r},S.prototype.getImageData=function(r,e){var o=new XMLHttpRequest;o.open("GET",r,!0),o.responseType="arraybuffer",o.onload=function(){if(this.status==200){var a=new Uint8Array(this.response);i=a.length;for(var s=new Array(i),n=0;n<a.length;n++)s[n]=String.fromCharCode(a[n]);var t=s.join(""),u=window.btoa(t);e("data:image/png;base64,"+u)}},o.send()},S.prototype.getColorAsync=function(r,e,o){var a=this;this.getImageData(r,function(s){var n=document.createElement("img");n.addEventListener("load",function(){var t=a.getPalette(n,5,o);e(t[0],this)}),n.src=s})};function st(r,e,o){r/=255,e/=255,o/=255;let a=Math.max(r,e,o),s=Math.min(r,e,o),n=a-s,t=0;n!==0&&(a===r?t=(e-o)/n%6:a===e?t=(o-r)/n+2:t=(r-e)/n+4,t*=60,t<0&&(t+=360));let u=a===0?0:n/a;return{h:t,s:u,v:a}}function ct(r){return"#"+r.map(e=>e.toString(16).padStart(2,"0")).join("")}function ut(r){let{s:e,v:o}=st(r[0],r[1],r[2]);return e<=.02&&o>=.96?[229,229,229]:o<=.08?[46,46,46]:ct(r)}async function z(r){return(await new S().getPalette(r,5)).map(ut).filter((s,n,t)=>t.indexOf(s)===n).slice(0,3)}var R=class{constructor(e){this.srcImg=null;this.selectedColor="";this.maker=new D;this.srcImg=e.srcImg,this.crossOrigin=e.crossOrigin||"anonymous"}async getColors(){let e=[];if(!this.srcImg)throw new Error("srcImg is null");return this.maker.on("imgLoaded",o=>{z(o).then(a=>{e=a,this.selectedColor=a[0]})}),await this.maker.setSrc(this.srcImg,this.crossOrigin),e}setColor(e){this.selectedColor=e}async generate(e){let o={outputImage:"",agcImage:""};return this.maker.hasSrc()&&this.selectedColor&&await this.maker.make(this.selectedColor).then(({preview512:a,preview216:s})=>{e?.agc&&(o.agcImage=s.toDataURL("image/png")),o.outputImage=a.toDataURL("image/png")}),o}};0&&(module.exports={AsIconGenerator});
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- var z=({red:r,green:n,blue:o})=>{let a=r/255,E=n/255,e=o/255,t=Math.max(a,E,e),c=Math.min(a,E,e),s=0,l=0,u=(t+c)/2;if(t===c)s=0,l=0;else{let _=t-c;l=u>.5?_/(2-t-c):_/(t+c),Math.abs(t-a)<=Number.EPSILON?s=(E-e)/_+(E<e?6:0):Math.abs(t-E)<=Number.EPSILON?s=(e-a)/_+2:Math.abs(t-e)<=Number.EPSILON&&(s=(a-E)/_+4),s/=6}return[s*360,l*100,u*100]};function B({x:r,y:n,r:o,ctx:a}){a.beginPath(),a.arc(r,n,o,0,Math.PI*2,!1),a.closePath()}var V=(r,n)=>new Promise(o=>{let a=new Image;a.onload=()=>{o(a);let E=Math.max(a.width,a.height),e=n/E;a.width=a.width*e,a.height=a.height*e},a.src=r}),T=r=>{let n=r?.getContext("2d");return n?(n.imageSmoothingEnabled=!0,n.imageSmoothingQuality="high",n):null},q=async(r,n)=>{let o=T(n);o&&(o.clearRect(0,0,512,512),n.width=512,Q(n),o.drawImage(r,n.width/2-r.width/2,n.height/2-r.height/2,358,358))},U=({centerX:r,centerY:n,r:o,thetaDegrees:a})=>{let E=a*(Math.PI/180),e=r+o*Math.cos(E),t=n+o*Math.sin(E);return{x:e,y:t}},X=({ctx:r,degrees:n,color:o})=>{let{x:a,y:E}=U({centerX:256,centerY:256,r:230,thetaDegrees:n});r.beginPath(),r.arc(a,E,38/2,0,2*Math.PI,!1),r.fillStyle=o,r.fill(),r.closePath()},F=async r=>{let n=({x:h,y:I})=>{let m=h-179,g=I-358/2,C=Math.sqrt(m*m+g*g);return Math.abs(l-C)<=2},o=document.createElement("canvas");o.width=358,o.height=358;let a=T(o);if(!a)return 2;a.drawImage(r,0,0,358,358);let E=a.getImageData(0,0,358,358),e=E.data,t=0,c=0,s=0,l=358/2,u=e.length;for(let h=0;h<u;h+=4){let I=h/4%358,m=Math.floor(h/4/358);if(n({x:I,y:m})){let[,g,C]=z({red:e[h],green:e[h+1],blue:e[h+2]}),p=g>=0&&g<=2&&C>=96&&C<=100,f=g>=0&&g<=100&&C>=0&&C<=8;s+=1,t+=p?1:0,c+=f?1:0}}let _=s*.01;return a.putImageData(E,0,0),c>=_&&t>=_||s>=2*(t+c)?2:s-c<=_?1:s-t<=_?0:2},W=({ctx:r,color:n})=>{r.beginPath();let o=358/2-6/2+1;r.lineWidth=6,r.strokeStyle=n,r.arc(256,256,o,0,2*Math.PI,!1),r.stroke(),r.closePath()},j=({canvas:r,color:n,borderType:o})=>{let a=T(r);if(!a||(a.clearRect(0,0,512,512),r.width=512,!n))return;a.beginPath();let E=38+358/2+26/2;a.lineCap="round",a.lineWidth=26,a.strokeStyle=n,a.arc(256,256,E,0,Math.PI,!1),a.stroke(),a.closePath();for(let e=1;e<=9;e++)X({ctx:a,degrees:180+18*e,color:n});if(n.toUpperCase()==="#E5E5E5"||n.toUpperCase()==="#2E2E2E"){W({ctx:a,color:n});return}o!==2&&W({ctx:a,color:o===0?"#E5E5E5":"#2E2E2E"})},Q=async r=>{let n=T(r);n&&(n.clearRect(0,0,512,512),B({x:256,y:256,r:358/2,ctx:n}),n.clip())};function J(r,n,o){let a=T(r);if(a===null)return"";let E=[n,o];for(let e=0;e<E.length;e++)a.drawImage(E[e],0,0);return r}var D=class{constructor(){this.srcImg=null;this.eventHandlers={}}on(n,o){this.eventHandlers[n]||(this.eventHandlers[n]=[]),this.eventHandlers[n].push(o)}emit(n,...o){this.eventHandlers[n]?.forEach(a=>a?.(...o))}async setSrc(n){return V(n,358).then(o=>(this.srcImg=o,this.emit("imgLoaded",o),o))}hasSrc(){return!!this.srcImg}async make(n){if(!this.srcImg)throw new Error("src img is not ready");let o=this.srcImg,a=await F(o),E=512,e=216,t=O(E,E),c=O(E,E);q(o,t),j({canvas:c,color:n,borderType:a});let s=O(E,E);J(s,t,c);let l=O(e,e);return T(l).drawImage(s,0,0,E,E,0,0,e,e),{preview512:s,preview216:l}}};function O(r,n){let o=document.createElement("canvas");return o.width=r,o.height=n,o}var y=function(r,n){return r<n?-1:r>n?1:0},R=function(r){return r.reduce(function(n,o){return n+o},0)},K=(function(){function r(o){this.colors=o}var n=r.prototype;return n.palette=function(){return this.colors},n.map=function(o){return o},r})(),Z=(function(){function r(e,t,c){return(e<<10)+(t<<5)+c}function n(e){var t=[],c=!1;function s(){t.sort(e),c=!0}return{push:function(l){t.push(l),c=!1},peek:function(l){return c||s(),l===void 0&&(l=t.length-1),t[l]},pop:function(){return c||s(),t.pop()},size:function(){return t.length},map:function(l){return t.map(l)},debug:function(){return c||s(),t}}}function o(e,t,c,s,l,u,_){var h=this;h.r1=e,h.r2=t,h.g1=c,h.g2=s,h.b1=l,h.b2=u,h.histo=_}function a(){this.vboxes=new n(function(e,t){return y(e.vbox.count()*e.vbox.volume(),t.vbox.count()*t.vbox.volume())})}function E(e,t){if(t.count()){var c=t.r2-t.r1+1,s=t.g2-t.g1+1,l=Math.max.apply(null,[c,s,t.b2-t.b1+1]);if(t.count()==1)return[t.copy()];var u,_,h,I,m=0,g=[],C=[];if(l==c)for(u=t.r1;u<=t.r2;u++){for(I=0,_=t.g1;_<=t.g2;_++)for(h=t.b1;h<=t.b2;h++)I+=e[r(u,_,h)]||0;g[u]=m+=I}else if(l==s)for(u=t.g1;u<=t.g2;u++){for(I=0,_=t.r1;_<=t.r2;_++)for(h=t.b1;h<=t.b2;h++)I+=e[r(_,u,h)]||0;g[u]=m+=I}else for(u=t.b1;u<=t.b2;u++){for(I=0,_=t.r1;_<=t.r2;_++)for(h=t.g1;h<=t.g2;h++)I+=e[r(_,h,u)]||0;g[u]=m+=I}return g.forEach(function(p,f){C[f]=m-p}),(function(p){var f,v,H,A,d,b=p+"1",N=p+"2",S=0;for(u=t[b];u<=t[N];u++)if(g[u]>m/2){for(H=t.copy(),A=t.copy(),d=(f=u-t[b])<=(v=t[N]-u)?Math.min(t[N]-1,~~(u+v/2)):Math.max(t[b],~~(u-1-f/2));!g[d];)d++;for(S=C[d];!S&&g[d-1];)S=C[--d];return H[N]=d,A[b]=H[N]+1,[H,A]}})(l==c?"r":l==s?"g":"b")}}return o.prototype={volume:function(e){var t=this;return t._volume&&!e||(t._volume=(t.r2-t.r1+1)*(t.g2-t.g1+1)*(t.b2-t.b1+1)),t._volume},count:function(e){var t=this,c=t.histo;if(!t._count_set||e){var s,l,u,_=0;for(s=t.r1;s<=t.r2;s++)for(l=t.g1;l<=t.g2;l++)for(u=t.b1;u<=t.b2;u++)_+=c[r(s,l,u)]||0;t._count=_,t._count_set=!0}return t._count},copy:function(){var e=this;return new o(e.r1,e.r2,e.g1,e.g2,e.b1,e.b2,e.histo)},avg:function(e){var t=this,c=t.histo;if(!t._avg||e){var s,l,u,_,h=0,I=0,m=0,g=0;if(t.r1===t.r2&&t.g1===t.g2&&t.b1===t.b2)t._avg=[t.r1<<3,t.g1<<3,t.b1<<3];else{for(l=t.r1;l<=t.r2;l++)for(u=t.g1;u<=t.g2;u++)for(_=t.b1;_<=t.b2;_++)h+=s=c[r(l,u,_)]||0,I+=s*(l+.5)*8,m+=s*(u+.5)*8,g+=s*(_+.5)*8;t._avg=h?[~~(I/h),~~(m/h),~~(g/h)]:[~~(8*(t.r1+t.r2+1)/2),~~(8*(t.g1+t.g2+1)/2),~~(8*(t.b1+t.b2+1)/2)]}}return t._avg},contains:function(e){var t=this,c=e[0]>>3;return gval=e[1]>>3,bval=e[2]>>3,c>=t.r1&&c<=t.r2&&gval>=t.g1&&gval<=t.g2&&bval>=t.b1&&bval<=t.b2}},a.prototype={push:function(e){this.vboxes.push({vbox:e,color:e.avg()})},palette:function(){return this.vboxes.map(function(e){return e.color})},size:function(){return this.vboxes.size()},map:function(e){for(var t=this.vboxes,c=0;c<t.size();c++)if(t.peek(c).vbox.contains(e))return t.peek(c).color;return this.nearest(e)},nearest:function(e){for(var t,c,s,l=this.vboxes,u=0;u<l.size();u++)((c=Math.sqrt(Math.pow(e[0]-l.peek(u).color[0],2)+Math.pow(e[1]-l.peek(u).color[1],2)+Math.pow(e[2]-l.peek(u).color[2],2)))<t||t===void 0)&&(t=c,s=l.peek(u).color);return s},forcebw:function(){var e=this.vboxes;e.sort(function(l,u){return y(R(l.color),R(u.color))});var t=e[0].color;t[0]<5&&t[1]<5&&t[2]<5&&(e[0].color=[0,0,0]);var c=e.length-1,s=e[c].color;s[0]>251&&s[1]>251&&s[2]>251&&(e[c].color=[255,255,255])}},{quantize:function(e,t){if(!Number.isInteger(t)||t<1||t>256)throw new Error("Invalid maximum color count. It must be an integer between 1 and 256.");if(!e.length||t<2||t>256||!e.length||t<2||t>256)return!1;for(var c=[],s=new Set,l=0;l<e.length;l++){var u=e[l],_=u.join(",");s.has(_)||(s.add(_),c.push(u))}if(c.length<=t)return new K(c);var h=(function(f){var v,H=new Array(32768);return f.forEach(function(A){v=r(A[0]>>3,A[1]>>3,A[2]>>3),H[v]=(H[v]||0)+1}),H})(e);h.forEach(function(){});var I=(function(f,v){var H,A,d,b=1e6,N=0,S=1e6,Y=0,w=1e6,M=0;return f.forEach(function(x){(H=x[0]>>3)<b?b=H:H>N&&(N=H),(A=x[1]>>3)<S?S=A:A>Y&&(Y=A),(d=x[2]>>3)<w?w=d:d>M&&(M=d)}),new o(b,N,S,Y,w,M,v)})(e,h),m=new n(function(f,v){return y(f.count(),v.count())});function g(f,v){for(var H,A=f.size(),d=0;d<1e3;){if(A>=v||d++>1e3)return;if((H=f.pop()).count()){var b=E(h,H),N=b[0],S=b[1];if(!N)return;f.push(N),S&&(f.push(S),A++)}else f.push(H),d++}}m.push(I),g(m,.75*t);for(var C=new n(function(f,v){return y(f.count()*f.volume(),v.count()*v.volume())});m.size();)C.push(m.pop());g(C,t);for(var p=new a;C.size();)p.push(C.pop());return p}}})().quantize,P=function(r){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.width=this.canvas.width=r.naturalWidth,this.height=this.canvas.height=r.naturalHeight,this.context.drawImage(r,0,0,this.width,this.height)};P.prototype.getImageData=function(){return this.context.getImageData(0,0,this.width,this.height)};var L=function(){};L.prototype.getColor=function(r,n){return n===void 0&&(n=10),this.getPalette(r,5,n)[0]},L.prototype.getPalette=function(r,n,o){var a=(function(c){var s=c.colorCount,l=c.quality;if(s!==void 0&&Number.isInteger(s)){if(s===1)throw new Error("colorCount should be between 2 and 20. To get one color, call getColor() instead of getPalette()");s=Math.max(s,2),s=Math.min(s,20)}else s=10;return(l===void 0||!Number.isInteger(l)||l<1)&&(l=10),{colorCount:s,quality:l}})({colorCount:n,quality:o}),E=new P(r),e=(function(c,s,l){for(var u,_,h,I,m,g=c,C=[],p=0;p<s;p+=l)_=g[0+(u=4*p)],h=g[u+1],I=g[u+2],((m=g[u+3])===void 0||m>=125)&&(_>250&&h>250&&I>250||C.push([_,h,I]));return C})(E.getImageData().data,E.width*E.height,a.quality),t=Z(e,a.colorCount);return t?t.palette():null},L.prototype.getColorFromUrl=function(r,n,o){var a=this,E=document.createElement("img");E.addEventListener("load",function(){var e=a.getPalette(E,5,o);n(e[0],r)}),E.src=r},L.prototype.getImageData=function(r,n){var o=new XMLHttpRequest;o.open("GET",r,!0),o.responseType="arraybuffer",o.onload=function(){if(this.status==200){var a=new Uint8Array(this.response);i=a.length;for(var E=new Array(i),e=0;e<a.length;e++)E[e]=String.fromCharCode(a[e]);var t=E.join(""),c=window.btoa(t);n("data:image/png;base64,"+c)}},o.send()},L.prototype.getColorAsync=function(r,n,o){var a=this;this.getImageData(r,function(E){var e=document.createElement("img");e.addEventListener("load",function(){var t=a.getPalette(e,5,o);n(t[0],this)}),e.src=E})};function $(r,n,o){r/=255,n/=255,o/=255;let a=Math.max(r,n,o),E=Math.min(r,n,o),e=a-E,t=0;e!==0&&(a===r?t=(n-o)/e%6:a===n?t=(o-r)/e+2:t=(r-n)/e+4,t*=60,t<0&&(t+=360));let c=a===0?0:e/a;return{h:t,s:c,v:a}}function tt(r){return"#"+r.map(n=>n.toString(16).padStart(2,"0")).join("")}function et(r){let{s:n,v:o}=$(r[0],r[1],r[2]);return n<=.02&&o>=.96?[229,229,229]:o<=.08?[46,46,46]:tt(r)}async function k(r){return(await new L().getPalette(r,5)).map(et).filter((E,e,t)=>t.indexOf(E)===e).slice(0,3)}var G=class{constructor(n){this.srcImg=null;this.selectedColor="";this.maker=new D;this.srcImg=n.srcImg}async getColors(){let n=[];if(!this.srcImg)throw new Error("srcImg is null");return this.maker.on("imgLoaded",o=>{k(o).then(a=>{n=a,this.selectedColor=a[0]})}),await this.maker.setSrc(this.srcImg),n}setColor(n){this.selectedColor=n}async generate(n){let o={outputImage:"",agcImage:""};return this.maker.hasSrc()&&this.selectedColor&&await this.maker.make(this.selectedColor).then(({preview512:a,preview216:E})=>{n?.agc&&(o.agcImage=E.toDataURL("image/png")),o.outputImage=a.toDataURL("image/png")}),o}};export{G as AsIconGenerator};
1
+ var z=({red:r,green:n,blue:o})=>{let a=r/255,s=n/255,e=o/255,t=Math.max(a,s,e),u=Math.min(a,s,e),c=0,E=0,l=(t+u)/2;if(t===u)c=0,E=0;else{let g=t-u;E=l>.5?g/(2-t-u):g/(t+u),Math.abs(t-a)<=Number.EPSILON?c=(s-e)/g+(s<e?6:0):Math.abs(t-s)<=Number.EPSILON?c=(e-a)/g+2:Math.abs(t-e)<=Number.EPSILON&&(c=(a-s)/g+4),c/=6}return[c*360,E*100,l*100]};function B({x:r,y:n,r:o,ctx:a}){a.beginPath(),a.arc(r,n,o,0,Math.PI*2,!1),a.closePath()}var V=(r,n)=>new Promise(o=>{r.onload=()=>{o(r);let a=Math.max(r.width,r.height),s=n/a;r.width=r.width*s,r.height=r.height*s}}),q=(r,n,o)=>new Promise(a=>{let s=new Image;s.onload=()=>{a(s);let e=Math.max(s.width,s.height),t=n/e;s.width=s.width*t,s.height=s.height*t},s.crossOrigin=o,s.src=r}),T=r=>{let n=r?.getContext("2d");return n?(n.imageSmoothingEnabled=!0,n.imageSmoothingQuality="high",n):null},X=async(r,n)=>{let o=T(n);o&&(o.clearRect(0,0,512,512),n.width=512,J(n),o.drawImage(r,n.width/2-r.width/2,n.height/2-r.height/2,358,358))},U=({centerX:r,centerY:n,r:o,thetaDegrees:a})=>{let s=a*(Math.PI/180),e=r+o*Math.cos(s),t=n+o*Math.sin(s);return{x:e,y:t}},F=({ctx:r,degrees:n,color:o})=>{let{x:a,y:s}=U({centerX:256,centerY:256,r:230,thetaDegrees:n});r.beginPath(),r.arc(a,s,38/2,0,2*Math.PI,!1),r.fillStyle=o,r.fill(),r.closePath()},j=async r=>{let n=({x:h,y:I})=>{let m=h-179,_=I-358/2,C=Math.sqrt(m*m+_*_);return Math.abs(E-C)<=2},o=document.createElement("canvas");o.width=358,o.height=358;let a=T(o);if(!a)return 2;a.drawImage(r,0,0,358,358);let s=a.getImageData(0,0,358,358),e=s.data,t=0,u=0,c=0,E=358/2,l=e.length;for(let h=0;h<l;h+=4){let I=h/4%358,m=Math.floor(h/4/358);if(n({x:I,y:m})){let[,_,C]=z({red:e[h],green:e[h+1],blue:e[h+2]}),p=_>=0&&_<=2&&C>=96&&C<=100,f=_>=0&&_<=100&&C>=0&&C<=8;c+=1,t+=p?1:0,u+=f?1:0}}let g=c*.01;return a.putImageData(s,0,0),u>=g&&t>=g||c>=2*(t+u)?2:c-u<=g?1:c-t<=g?0:2},W=({ctx:r,color:n})=>{r.beginPath();let o=358/2-6/2+1;r.lineWidth=6,r.strokeStyle=n,r.arc(256,256,o,0,2*Math.PI,!1),r.stroke(),r.closePath()},Q=({canvas:r,color:n,borderType:o})=>{let a=T(r);if(!a||(a.clearRect(0,0,512,512),r.width=512,!n))return;a.beginPath();let s=38+358/2+26/2;a.lineCap="round",a.lineWidth=26,a.strokeStyle=n,a.arc(256,256,s,0,Math.PI,!1),a.stroke(),a.closePath();for(let e=1;e<=9;e++)F({ctx:a,degrees:180+18*e,color:n});if(n.toUpperCase()==="#E5E5E5"||n.toUpperCase()==="#2E2E2E"){W({ctx:a,color:n});return}o!==2&&W({ctx:a,color:o===0?"#E5E5E5":"#2E2E2E"})},J=async r=>{let n=T(r);n&&(n.clearRect(0,0,512,512),B({x:256,y:256,r:358/2,ctx:n}),n.clip())};function K(r,n,o){let a=T(r);if(a===null)return"";let s=[n,o];for(let e=0;e<s.length;e++)a.drawImage(s[e],0,0);return r}var D=class{constructor(){this.srcImg=null;this.eventHandlers={}}on(n,o){this.eventHandlers[n]||(this.eventHandlers[n]=[]),this.eventHandlers[n].push(o)}emit(n,...o){this.eventHandlers[n]?.forEach(a=>a?.(...o))}async setSrc(n,o){return n instanceof HTMLImageElement?V(n,358).then(a=>(this.srcImg=a,this.emit("imgLoaded",a),a)):q(n,358,o).then(a=>(this.srcImg=a,this.emit("imgLoaded",a),a))}hasSrc(){return!!this.srcImg}async make(n){if(!this.srcImg)throw new Error("src img is not ready");let o=this.srcImg,a=await j(o),s=512,e=216,t=O(s,s),u=O(s,s);X(o,t),Q({canvas:u,color:n,borderType:a});let c=O(s,s);K(c,t,u);let E=O(e,e);return T(E).drawImage(c,0,0,s,s,0,0,e,e),{preview512:c,preview216:E}}};function O(r,n){let o=document.createElement("canvas");return o.width=r,o.height=n,o}var M=function(r,n){return r<n?-1:r>n?1:0},R=function(r){return r.reduce(function(n,o){return n+o},0)},Z=(function(){function r(o){this.colors=o}var n=r.prototype;return n.palette=function(){return this.colors},n.map=function(o){return o},r})(),$=(function(){function r(e,t,u){return(e<<10)+(t<<5)+u}function n(e){var t=[],u=!1;function c(){t.sort(e),u=!0}return{push:function(E){t.push(E),u=!1},peek:function(E){return u||c(),E===void 0&&(E=t.length-1),t[E]},pop:function(){return u||c(),t.pop()},size:function(){return t.length},map:function(E){return t.map(E)},debug:function(){return u||c(),t}}}function o(e,t,u,c,E,l,g){var h=this;h.r1=e,h.r2=t,h.g1=u,h.g2=c,h.b1=E,h.b2=l,h.histo=g}function a(){this.vboxes=new n(function(e,t){return M(e.vbox.count()*e.vbox.volume(),t.vbox.count()*t.vbox.volume())})}function s(e,t){if(t.count()){var u=t.r2-t.r1+1,c=t.g2-t.g1+1,E=Math.max.apply(null,[u,c,t.b2-t.b1+1]);if(t.count()==1)return[t.copy()];var l,g,h,I,m=0,_=[],C=[];if(E==u)for(l=t.r1;l<=t.r2;l++){for(I=0,g=t.g1;g<=t.g2;g++)for(h=t.b1;h<=t.b2;h++)I+=e[r(l,g,h)]||0;_[l]=m+=I}else if(E==c)for(l=t.g1;l<=t.g2;l++){for(I=0,g=t.r1;g<=t.r2;g++)for(h=t.b1;h<=t.b2;h++)I+=e[r(g,l,h)]||0;_[l]=m+=I}else for(l=t.b1;l<=t.b2;l++){for(I=0,g=t.r1;g<=t.r2;g++)for(h=t.g1;h<=t.g2;h++)I+=e[r(g,h,l)]||0;_[l]=m+=I}return _.forEach(function(p,f){C[f]=m-p}),(function(p){var f,v,H,A,d,b=p+"1",N=p+"2",L=0;for(l=t[b];l<=t[N];l++)if(_[l]>m/2){for(H=t.copy(),A=t.copy(),d=(f=l-t[b])<=(v=t[N]-l)?Math.min(t[N]-1,~~(l+v/2)):Math.max(t[b],~~(l-1-f/2));!_[d];)d++;for(L=C[d];!L&&_[d-1];)L=C[--d];return H[N]=d,A[b]=H[N]+1,[H,A]}})(E==u?"r":E==c?"g":"b")}}return o.prototype={volume:function(e){var t=this;return t._volume&&!e||(t._volume=(t.r2-t.r1+1)*(t.g2-t.g1+1)*(t.b2-t.b1+1)),t._volume},count:function(e){var t=this,u=t.histo;if(!t._count_set||e){var c,E,l,g=0;for(c=t.r1;c<=t.r2;c++)for(E=t.g1;E<=t.g2;E++)for(l=t.b1;l<=t.b2;l++)g+=u[r(c,E,l)]||0;t._count=g,t._count_set=!0}return t._count},copy:function(){var e=this;return new o(e.r1,e.r2,e.g1,e.g2,e.b1,e.b2,e.histo)},avg:function(e){var t=this,u=t.histo;if(!t._avg||e){var c,E,l,g,h=0,I=0,m=0,_=0;if(t.r1===t.r2&&t.g1===t.g2&&t.b1===t.b2)t._avg=[t.r1<<3,t.g1<<3,t.b1<<3];else{for(E=t.r1;E<=t.r2;E++)for(l=t.g1;l<=t.g2;l++)for(g=t.b1;g<=t.b2;g++)h+=c=u[r(E,l,g)]||0,I+=c*(E+.5)*8,m+=c*(l+.5)*8,_+=c*(g+.5)*8;t._avg=h?[~~(I/h),~~(m/h),~~(_/h)]:[~~(8*(t.r1+t.r2+1)/2),~~(8*(t.g1+t.g2+1)/2),~~(8*(t.b1+t.b2+1)/2)]}}return t._avg},contains:function(e){var t=this,u=e[0]>>3;return gval=e[1]>>3,bval=e[2]>>3,u>=t.r1&&u<=t.r2&&gval>=t.g1&&gval<=t.g2&&bval>=t.b1&&bval<=t.b2}},a.prototype={push:function(e){this.vboxes.push({vbox:e,color:e.avg()})},palette:function(){return this.vboxes.map(function(e){return e.color})},size:function(){return this.vboxes.size()},map:function(e){for(var t=this.vboxes,u=0;u<t.size();u++)if(t.peek(u).vbox.contains(e))return t.peek(u).color;return this.nearest(e)},nearest:function(e){for(var t,u,c,E=this.vboxes,l=0;l<E.size();l++)((u=Math.sqrt(Math.pow(e[0]-E.peek(l).color[0],2)+Math.pow(e[1]-E.peek(l).color[1],2)+Math.pow(e[2]-E.peek(l).color[2],2)))<t||t===void 0)&&(t=u,c=E.peek(l).color);return c},forcebw:function(){var e=this.vboxes;e.sort(function(E,l){return M(R(E.color),R(l.color))});var t=e[0].color;t[0]<5&&t[1]<5&&t[2]<5&&(e[0].color=[0,0,0]);var u=e.length-1,c=e[u].color;c[0]>251&&c[1]>251&&c[2]>251&&(e[u].color=[255,255,255])}},{quantize:function(e,t){if(!Number.isInteger(t)||t<1||t>256)throw new Error("Invalid maximum color count. It must be an integer between 1 and 256.");if(!e.length||t<2||t>256||!e.length||t<2||t>256)return!1;for(var u=[],c=new Set,E=0;E<e.length;E++){var l=e[E],g=l.join(",");c.has(g)||(c.add(g),u.push(l))}if(u.length<=t)return new Z(u);var h=(function(f){var v,H=new Array(32768);return f.forEach(function(A){v=r(A[0]>>3,A[1]>>3,A[2]>>3),H[v]=(H[v]||0)+1}),H})(e);h.forEach(function(){});var I=(function(f,v){var H,A,d,b=1e6,N=0,L=1e6,w=0,y=1e6,Y=0;return f.forEach(function(x){(H=x[0]>>3)<b?b=H:H>N&&(N=H),(A=x[1]>>3)<L?L=A:A>w&&(w=A),(d=x[2]>>3)<y?y=d:d>Y&&(Y=d)}),new o(b,N,L,w,y,Y,v)})(e,h),m=new n(function(f,v){return M(f.count(),v.count())});function _(f,v){for(var H,A=f.size(),d=0;d<1e3;){if(A>=v||d++>1e3)return;if((H=f.pop()).count()){var b=s(h,H),N=b[0],L=b[1];if(!N)return;f.push(N),L&&(f.push(L),A++)}else f.push(H),d++}}m.push(I),_(m,.75*t);for(var C=new n(function(f,v){return M(f.count()*f.volume(),v.count()*v.volume())});m.size();)C.push(m.pop());_(C,t);for(var p=new a;C.size();)p.push(C.pop());return p}}})().quantize,P=function(r){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.width=this.canvas.width=r.naturalWidth,this.height=this.canvas.height=r.naturalHeight,this.context.drawImage(r,0,0,this.width,this.height)};P.prototype.getImageData=function(){return this.context.getImageData(0,0,this.width,this.height)};var S=function(){};S.prototype.getColor=function(r,n){return n===void 0&&(n=10),this.getPalette(r,5,n)[0]},S.prototype.getPalette=function(r,n,o){var a=(function(u){var c=u.colorCount,E=u.quality;if(c!==void 0&&Number.isInteger(c)){if(c===1)throw new Error("colorCount should be between 2 and 20. To get one color, call getColor() instead of getPalette()");c=Math.max(c,2),c=Math.min(c,20)}else c=10;return(E===void 0||!Number.isInteger(E)||E<1)&&(E=10),{colorCount:c,quality:E}})({colorCount:n,quality:o}),s=new P(r),e=(function(u,c,E){for(var l,g,h,I,m,_=u,C=[],p=0;p<c;p+=E)g=_[0+(l=4*p)],h=_[l+1],I=_[l+2],((m=_[l+3])===void 0||m>=125)&&(g>250&&h>250&&I>250||C.push([g,h,I]));return C})(s.getImageData().data,s.width*s.height,a.quality),t=$(e,a.colorCount);return t?t.palette():null},S.prototype.getColorFromUrl=function(r,n,o){var a=this,s=document.createElement("img");s.addEventListener("load",function(){var e=a.getPalette(s,5,o);n(e[0],r)}),s.src=r},S.prototype.getImageData=function(r,n){var o=new XMLHttpRequest;o.open("GET",r,!0),o.responseType="arraybuffer",o.onload=function(){if(this.status==200){var a=new Uint8Array(this.response);i=a.length;for(var s=new Array(i),e=0;e<a.length;e++)s[e]=String.fromCharCode(a[e]);var t=s.join(""),u=window.btoa(t);n("data:image/png;base64,"+u)}},o.send()},S.prototype.getColorAsync=function(r,n,o){var a=this;this.getImageData(r,function(s){var e=document.createElement("img");e.addEventListener("load",function(){var t=a.getPalette(e,5,o);n(t[0],this)}),e.src=s})};function tt(r,n,o){r/=255,n/=255,o/=255;let a=Math.max(r,n,o),s=Math.min(r,n,o),e=a-s,t=0;e!==0&&(a===r?t=(n-o)/e%6:a===n?t=(o-r)/e+2:t=(r-n)/e+4,t*=60,t<0&&(t+=360));let u=a===0?0:e/a;return{h:t,s:u,v:a}}function et(r){return"#"+r.map(n=>n.toString(16).padStart(2,"0")).join("")}function nt(r){let{s:n,v:o}=tt(r[0],r[1],r[2]);return n<=.02&&o>=.96?[229,229,229]:o<=.08?[46,46,46]:et(r)}async function k(r){return(await new S().getPalette(r,5)).map(nt).filter((s,e,t)=>t.indexOf(s)===e).slice(0,3)}var G=class{constructor(n){this.srcImg=null;this.selectedColor="";this.maker=new D;this.srcImg=n.srcImg,this.crossOrigin=n.crossOrigin||"anonymous"}async getColors(){let n=[];if(!this.srcImg)throw new Error("srcImg is null");return this.maker.on("imgLoaded",o=>{k(o).then(a=>{n=a,this.selectedColor=a[0]})}),await this.maker.setSrc(this.srcImg,this.crossOrigin),n}setColor(n){this.selectedColor=n}async generate(n){let o={outputImage:"",agcImage:""};return this.maker.hasSrc()&&this.selectedColor&&await this.maker.make(this.selectedColor).then(({preview512:a,preview216:s})=>{n?.agc&&(o.agcImage=s.toDataURL("image/png")),o.outputImage=a.toDataURL("image/png")}),o}};export{G as AsIconGenerator};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atomicservice/as-icon-generator",
3
- "version": "1.0.12",
3
+ "version": "1.0.14",
4
4
  "author": "atomicservice",
5
5
  "description": "atomicservice icon generator",
6
6
  "files": [
@@ -21,6 +21,7 @@
21
21
  "eslint": "^9.26.0",
22
22
  "rimraf": "^6.0.1",
23
23
  "tsup": "^8.4.0",
24
+ "typescript": "^5.8.3",
24
25
  "vitest": "3.1.3"
25
26
  },
26
27
  "dependencies": {