Autore Topic: QR Code: creare l'immagine da un testo e viceversa  (Letto 953 volte)

Offline vuott

  • Senatore Gambero
  • ******
  • Post: 6.738
    • Mostra profilo
QR Code: creare l'immagine da un testo e viceversa
« il: 14 Agosto 2013, 02:37:13 »
Dalla collaborazione di milio e vuott......



si è ricavato un applicativo per poter conoscere il testo del QR Code.
Per la realizzazione di questo codice si sono utilizzate le funzioni delle librerie dinamiche di ''OpenCV'' e di ''QRdecoder".

Ne presentiamo il resoconto di seguito:


Codice: gambas [Seleziona]
Public Struct QrCodeHeader
   model As Integer
   version As Integer
   level As Integer
   charactor_size As Integer
   byte_size As Integer
End Struct

Private Const CV_LOAD_IMAGE_UNCHANGED As Short = -1
Private Const DEFAULT_ADAPTIVE_TH_SIZE As Byte = 25
Private Const DEFAULT_ADAPTIVE_TH_DELTA As Byte = 10


Library "libopencv_highgui:2.4.2"

' IplImage* cvLoadImage( const char* filename, int flags )
Private Extern cvLoadImage(filename As String, flagLIC As Integer) As Pointer


Library "libopencv_core:2.4.2"

' void cvReleaseImage(IplImage * image)
Private Extern cvReleaseImage(img As Pointer)


Library "libdecodeqr:0.9.3"

' QrDecoderHandle   qr_decoder_open ()
Private Extern qr_decoder_open() As Pointer

' short   qr_decoder_decode_image (QrDecoderHandle decoder, IplImage *src, int adaptive_th_size, int adaptive_th_delta)
Private Extern qr_decoder_decode_image(decoderP As Pointer, srcP As Pointer, adaptive_th_size As Integer, adaptive_th_delta As Integer) As Short

' int   qr_decoder_get_header (QrDecoderHandle decoder, QrCodeHeader *header)
Private Extern qr_decoder_get_header(decoderP As Pointer, header As Pointer) As Integer

' int   qr_decoder_get_body (QrDecoderHandle decoder, unsigned char *buf, int buf_size)
Private Extern qr_decoder_get_body(decoderP As Pointer, buf As Pointer, buf_size As Integer) As Integer

' void   qr_decoder_close (QrDecoderHandle decoder)
Private Extern qr_decoder_close(decoderP As Pointer)


Public Sub Button1_Click()

 Dim header, imago, decoder, buf As Pointer
 Dim qdh As QrCodeHeader


   header = Alloc(24)

' Viene caricata l'immagine del "QR Code":
   imago = cvLoadImage("/percorso/della/immagine/del/Qr Code", CV_LOAD_IMAGE_UNCHANGED)

' Viene inizializzata la libreria "decoderqr":
   decoder = qr_decoder_open()

' Effettua la decodifica utilizzando parametri di default:
   qr_decoder_decode_image(decoder, imago, DEFAULT_ADAPTIVE_TH_SIZE, DEFAULT_ADAPTIVE_TH_DELTA)

   If IsNull(qr_decoder_get_header(decoder, header)) = False Then
  
     qdh = Header
  
     buf = Alloc(qdh.byte_size + 1)

     qr_decoder_get_body(decoder, buf, qdh.byte_size + 1)

' Dereferenziando il "pointer", viene mostrato il testo del "QR Code":
     Print String@(buf)

   Endif


' Va in chiusura:
   qr_decoder_close(decoder)

   cvReleaseImage(VarPtr(imago))

   Free(buf)

   Free(header)

End
« Ultima modifica: 15 Agosto 2013, 05:24:42 da vuott »
" Chi non vede il non senso del mondo, è vano a sua volta. "

(B. Pascal, 1623 – 1662)

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.200
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Conoscere il QR Code Text di un Barcode
« Risposta #1 il: 14 Agosto 2013, 05:57:35 »
Non diciamo fesserie!

Il merito di questo progetto è tutto tuo.... io ti avevo solo chiesto una dritta e alla fine hai buttato giù tutto il codice  :ok:

Comunque grazie... se tu volessi fare anche il processo inverso come descritto in messaggio privato, potremmo realizzare un bel componente....


Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.859
    • Mostra profilo
Re: Conoscere il QR Code Text
« Risposta #2 il: 14 Agosto 2013, 19:35:10 »
'Stò ragazzo ormai non se controlla più...  ;D

Ormai è entrato a far parte della casta dei "guru", e il bello è che non se ne rende nemmeno conto...  :2birre:

Offline vuott

  • Senatore Gambero
  • ******
  • Post: 6.738
    • Mostra profilo
Re: QR Code: creare l'immagine da un testo e viceversa
« Risposta #3 il: 14 Agosto 2013, 19:41:00 »
.....far parte della casta dei "guru",

...me ne voglio anda' a fa' 'n guru !
« Ultima modifica: 18 Ottobre 2013, 15:32:01 da vuott »
" Chi non vede il non senso del mondo, è vano a sua volta. "

(B. Pascal, 1623 – 1662)

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.859
    • Mostra profilo
Re: Conoscere il QR Code Text
« Risposta #4 il: 14 Agosto 2013, 20:01:19 »
gurucuccuru...  ;D

Offline vuott

  • Senatore Gambero
  • ******
  • Post: 6.738
    • Mostra profilo
Re: QR Code: creare l'immagine da un testo e viceversa
« Risposta #5 il: 15 Agosto 2013, 05:31:06 »
Vediamo ora un breve codice per generare il QR code di un testo.

Preciso che questo semplicissimo codice non salverà il disegno del QR Code in un file immagine, ma lo mostrerà in console.... abbiate pazienza !    :'(


Codice: gambas [Seleziona]

Public Struct QRcode
  version As Integer
  width As Integer
  data As Pointer
End Struct


Private Const QR_ECLEVEL_L As Byte = 0    ' Level of error correction: lowest
Private Const QR_MODE_8 As Byte = 2       ' 8-bit data mode


Library "libqrencode:3.4.1"

' QRcode * QRcode_encodeString(const char * String, Int version, QRecLevel level, QRencodeMode hint, Int casesensitive)  --> Create a symbol from the string.
Private Extern QRcode_encodeString(testo As String, vers As Integer, level As Integer, hint As Integer, casesensitive As Integer) As QRcode

' void   QRcode_free (QRcode *qrcode)  --> Free the instance of QRcode class.
Private Extern QRcode_free(qrcode As QRcode)



Public Sub Form_Open()

  Dim result As New QRcode
  Dim s As String = "http://www.gambas-it.org"     ' testo di cui genereremo il QR Code
  Dim ms As Stream
  Dim j As Short
  Dim b As Byte


    result = QRcode_encodeString(s, 0, QR_ECLEVEL_L, QR_MODE_8, 1)
    
' Usiamo i Memory-Stream per dereferenziare in tutta la sua dimensione
' la variabile di tipo "puntatore" del 3° campo della Struttura:
    ms = Memory result.data For Read
    
    For j = 0 To (result.width * result.width) - 1

      Read #ms, b
      If (b And 1) = 1 Then          ' Se il LSB del byte è uguale a 1, allora...
        Print String$(2, String.Chr(&2588));
      Else                                     ' se il LSB è invece uguale a zero, allora....
        Print Space(2);
      Endif
      
' Se abbiamo terminato di scrivere in console una riga del QR Code, allora andiamo a capo:
      If (j + 1) Mod result.width = 0 Then Print

    Next

' Va in chiusura:
    QRcode_free(result)

End
« Ultima modifica: 15 Agosto 2013, 17:08:40 da vuott »
" Chi non vede il non senso del mondo, è vano a sua volta. "

(B. Pascal, 1623 – 1662)

Offline vuott

  • Senatore Gambero
  • ******
  • Post: 6.738
    • Mostra profilo
Re:QR Code: creare l'immagine da un testo e viceversa
« Risposta #6 il: 12 Agosto 2017, 17:23:42 »
Per analogia di argomento vi segnalo questa pagina:

http://www.gambas-it.org/smf/index.php?topic=5856
" Chi non vede il non senso del mondo, è vano a sua volta. "

(B. Pascal, 1623 – 1662)