@@ -71,4 +71,62 @@ function stopQrScanner() {
7171 if ( qrAnimationId ) { cancelAnimationFrame ( qrAnimationId ) ; qrAnimationId = null ; }
7272 if ( qrStream ) { qrStream . getTracks ( ) . forEach ( track => track . stop ( ) ) ; qrStream = null ; }
7373 console . log ( "Scanner QR interrotto." ) ;
74+ }
75+
76+ function handleQrFileUpload ( event ) {
77+ const file = event . target . files [ 0 ] ;
78+ if ( ! file ) return ;
79+
80+ const textArea = document . getElementById ( "extra-info" ) ;
81+ const confirmBtn = document . getElementById ( "confirmLoginRP" ) ;
82+
83+ // Crea un lettore di file per trasformare l'immagine in URL Base64
84+ const reader = new FileReader ( ) ;
85+ reader . onload = function ( e ) {
86+ const img = new Image ( ) ;
87+ img . onload = function ( ) {
88+ // Crea un canvas virtuale (in memoria) per estrarre i pixel dell'immagine
89+ const virtualCanvas = document . createElement ( "canvas" ) ;
90+ const ctx = virtualCanvas . getContext ( "2d" ) ;
91+
92+ virtualCanvas . width = img . width ;
93+ virtualCanvas . height = img . height ;
94+
95+ // Disegna l'immagine caricata sul canvas virtuale
96+ ctx . drawImage ( img , 0 , 0 , img . width , img . height ) ;
97+
98+ // Estrae i dati dei pixel
99+ const imageData = ctx . getImageData ( 0 , 0 , img . width , img . height ) ;
100+
101+ // Tenta la decodifica con jsQR
102+ const code = jsQR ( imageData . data , imageData . width , imageData . height , {
103+ inversionAttempts : "dontInvert" ,
104+ } ) ;
105+
106+ if ( code ) {
107+ console . log ( "QR Code rilevato da file:" , code . data ) ;
108+
109+ // Inserisce il valore nella textarea
110+ if ( textArea ) textArea . value = code . data ;
111+
112+ // Attiva il pulsante di conferma
113+ if ( confirmBtn ) confirmBtn . disabled = false ;
114+
115+ // Chiude la modale
116+ const qrModalElement = document . getElementById ( 'qr-scanner-modal' ) ;
117+ const qrModal = bootstrap . Modal . getInstance ( qrModalElement ) ;
118+ if ( qrModal ) qrModal . hide ( ) ;
119+
120+ // Spegne lo scanner se la fotocamera era attiva
121+ stopQrScanner ( ) ;
122+ } else {
123+ alert ( "Impossibile trovare un QR Code valido in questa immagine. Riprova con un'immagine più nitida." ) ;
124+ }
125+
126+ // Reset dell'input file per permettere di ricaricare lo stesso file in caso di errore
127+ event . target . value = "" ;
128+ } ;
129+ img . src = e . target . result ;
130+ } ;
131+ reader . readAsDataURL ( file ) ;
74132}
0 commit comments