exportclassCharset{publicstaticreadonlyCP437:Charset;publicstaticreadonlyISO_8859_1:Charset;publicstaticreadonlyISO_8859_2:Charset;publicstaticreadonlyISO_8859_3:Charset;publicstaticreadonlyISO_8859_4:Charset;publicstaticreadonlyISO_8859_5:Charset;publicstaticreadonlyISO_8859_6:Charset;publicstaticreadonlyISO_8859_7:Charset;publicstaticreadonlyISO_8859_8:Charset;publicstaticreadonlyISO_8859_9:Charset;publicstaticreadonlyISO_8859_10:Charset;publicstaticreadonlyISO_8859_11:Charset;publicstaticreadonlyISO_8859_13:Charset;publicstaticreadonlyISO_8859_14:Charset;publicstaticreadonlyISO_8859_15:Charset;publicstaticreadonlyISO_8859_16:Charset;publicstaticreadonlySHIFT_JIS:Charset;publicstaticreadonlyCP1250:Charset;publicstaticreadonlyCP1251:Charset;publicstaticreadonlyCP1252:Charset;publicstaticreadonlyCP1256:Charset;publicstaticreadonlyUTF_16BE:Charset;publicstaticreadonlyUTF_8:Charset;publicstaticreadonlyASCII:Charset;publicstaticreadonlyBIG5:Charset;publicstaticreadonlyGB2312:Charset;publicstaticreadonlyEUC_KR:Charset;publicstaticreadonlyGBK:Charset;publicstaticreadonlyGB18030:Charset;publicstaticreadonlyUTF_16LE:Charset;publicstaticreadonlyUTF_32BE:Charset;publicstaticreadonlyUTF_32LE:Charset;publicstaticreadonlyISO_646_INV:Charset;publicstaticreadonlyBINARY:Charset;publicconstructor(label:string, ...values:number[]);}declaretypeFNC1=[mode:'GS1']|[mode:'AIM',indicator:number];
exportclassAlphanumeric{publicconstructor(content:string);}exportclassByte{publicconstructor(content:string,charset?:Charset);}exportclassHanzi{publicconstructor(content:string);}exportclassKanji{publicconstructor(content:string);}exportclassNumeric{publicconstructor(content:string);}exportinterfaceEncoderOptions{hints?:{fnc1?:FNC1};version?:'Auto'|number;level?:'L'|'M'|'Q'|'H';encode?:(content:string,charset:Charset)=>Uint8Array;}declareinterfaceDataURLOptions{margin?:number;foreground?:[R:number,G:number,B:number];background?:[R:number,G:number,B:number];}exportclassEncoded{publicsize:number;publicmask:number;publiclevel:string;publicversion:number;publicget(x:number,y:number):number;publictoDataURL(moduleSize:number,options?:DataURLOptions):string;}exportclassEncoder{publicconstructor(options?:EncoderOptions);publicencode(...segments:(Alphanumeric|Byte|Hanzi|Kanji|Numeric)[]):Encoded;}
import{Byte,Encoder,Hanzi,Kanji}from'@nuintun/qrcode';constencoder=newEncoder({level:'H'});constqrcode=encoder.encode(// HanzinewHanzi('你好世界'),// BytenewByte('\nhello world\n'),// KanjinewKanji('こんにちは世界'));console.log(qrcode.toDataURL());
exportclassBitMatrix{publicconstructor(width:number,height:number,bits?:Int32Array);publicgetwidth():number;publicgetheight():number;publicset(x:number,y:number):void;publicget(x:number,y:number):number;publicflip():void;publicflip(x:number,y:number):void;publicclone():BitMatrix;publicsetRegion(left:number,top:number,width:number,height:number):void;}exportclassPoint{publicgetx():number;publicgety():number;}exportclassPatternextendsPoint{publicgetmoduleSize():number;}declareclassFinderPatternGroup{publicgettopLeft():Pattern;publicgettopRight():Pattern;publicgetbottomLeft():Pattern;}exportclassDetected{publicgetmatrix():BitMatrix;publicgetfinder():FinderPatternGroup;publicgetalignment():Pattern|undefined;publicgetsize():number;publicgetmoduleSize():number;publicmapping(x:number,y:number):Point;}declareinterfaceStructured{readonlyindex:number;readonlycount:number;readonlyparity:number;}exportclassDecoded{publicgetmask():number;publicgetlevel():string;publicgetversion():number;publicgetmirror():boolean;publicgetcontent():string;publicgetcorrected():number;publicgetsymbology():string;publicgetfnc1():FNC1|false;publicgetcodewords():Uint8Array;publicgetstructured():Structured|false;}exportfunctiongrayscale(imageData:ImageData):Uint8Array;exportfunctionbinarize(luminances:Uint8Array,width:number,height:number):BitMatrix;exportinterfaceDetectorOptions{strict?:boolean;}exportclassDetector{publicconstructor(options?:DetectorOptions);publicdetect(binarized:BitMatrix):Generator<Detected,void,boolean>;}exportinterfaceDecoderOptions{decode?:(bytes:Uint8Array,charset:Charset)=>string;}exportclassDecoder{publicconstructor(options?:DecoderOptions);publicdecode(matrix:BitMatrix):Decoded;}
import{binarize,Decoder,Detector,grayscale}from'@nuintun/qrcode';constimage=newImage();image.crossOrigin='anonymous';image.addEventListener('error',()=>{console.error('image load error');});image.addEventListener('load',()=>{const{ width, height}=image;constcanvas=newOffscreenCanvas(width,height);constcontext=canvas.getContext('2d')!;context.drawImage(image,0,0);constluminances=grayscale(context.getImageData(0,0,width,height));constbinarized=binarize(luminances,width,height);constdetector=newDetector();// Notice: the detect result are possible combinations of QR Code regions,// which may not necessarily be successfully decoded.constdetected=detector.detect(binarized);constdecoder=newDecoder();letcurrent=detected.next();while(!current.done){letsucceed=false;constdetect=current.value;try{const{ size, finder, alignment}=detect;constdecoded=decoder.decode(detect.matrix);// Finderconst{ topLeft, topRight, bottomLeft}=finder;// CornersconsttopLeftCorner=detect.mapping(0,0);consttopRightCorner=detect.mapping(size,0);constbottomRightCorner=detect.mapping(size,size);constbottomLeftCorner=detect.mapping(0,size);// TimingconsttopLeftTiming=detect.mapping(6.5,6.5);consttopRightTiming=detect.mapping(size-6.5,6.5);constbottomLeftTiming=detect.mapping(6.5,size-6.5);console.log({content:decoded.content,finder:[topLeft,topRight,bottomLeft],alignment:alignment ?alignment :null,timing:[topLeftTiming,topRightTiming,bottomLeftTiming],corners:[topLeftCorner,topRightCorner,bottomRightCorner,bottomLeftCorner]});succeed=true;}catch{// Decode failed, skipping...}// Notice: pass succeed to next() is very important,// this can significantly reduce the number of detections.current=detected.next(succeed);}});image.src='https://nuintun.github.io/qrcode/public/images/qrcode.jpg';