lean-qr
Version:
minimal QR code generation
2 lines (1 loc) • 1.08 kB
JavaScript
;var e=require("node:zlib");const r=Buffer.from([137,80,78,71,13,10,26,10]),f=Buffer.from([]),t=(t,{on:n=[0,0,0],off:s=[0,0,0,0],padX:a=4,padY:u=4,scale:l=1}={})=>{const c=(t.size+2*a)*l,B=(t.size+2*u)*l,i=c+15>>3,p=Buffer.alloc(B*i);for(let e=0;e<B;++e)for(let r=0;r<c;++r)t.get((r/l|0)-a,(e/l|0)-u)&&(p[e*i+1+(r>>3)]|=128>>(7&r));const d=s[3]??255,b=n[3]??255,g=(d&b)<255,v=s[0]|s[1]|s[2]|(n[0]&n[1]&n[2])<255|g,x=Buffer.alloc(13);return x.writeUInt32BE(c,0),x.writeUInt32BE(B,4),x[8]=1,x[9]=v?3:0,Buffer.concat([r,o(1229472850,x),v?o(1347179589,[s[0],s[1],s[2],n[0],n[1],n[2]]):f,g?o(1951551059,[d,b]):f,o(1229209940,e.deflateSync(p,{level:9})),o(1229278788,[])])},o=(e,r)=>{const f=r.length,t=Buffer.alloc(12+f);return t.writeUInt32BE(f,0),t.writeUInt32BE(e,4),t.set(r,8),t.writeUInt32BE(~t.subarray(4,8+f).reduce(((e,r)=>n[255&(e^r)]^e>>>8),-1)>>>0,8+f),t},n=new Uint32Array(256);for(let e=0;e<256;++e){let r=e;for(let e=0;e<8;++e)r=3988292384*(1&r)^r>>>1;n[e]=r}exports.toPngBuffer=t,exports.toPngDataURL=(e,r)=>"data:image/png;base64,"+t(e,r).toString("base64");