Subject: Re: Images prises depuis Internet

From: [email-masked]
Date: Thu, 4 Aug 2022 23:47:54 +0200 (CEST)

Bonsoir

Je confirme que le code marche très bien, je QR-code un max !

J'ai une remarque :

Les environ 10 dernières lignes du QR-code généré par python rajoutent des espaces après les chiffres (ils se colorent en rouge comme indiqué dans le code)

J'arrive à supprimer les espaces à la main dans frescobaldi, mais c'est un peu étrange.

Et une question :

J'ai l'impression que le QR-code est généré de manière à être très précis (avec un max de vérifications)

Est-il possible de créer un QR-code certes moins fiable car moins précis, mais avec moins de vérifications ?

J'espère avoir une QR-code soit plus petit en taille, soit avec des points plus gros

D'avance merci et bonne soirée

David

De : [email-masked]
À : [email-masked]
Sujet : Re: Images prises depuis Internet
Date : 05/07/2022 11:23:56 Europe/Paris

Incroyable !

Comme dans mes rêves les plus fous !!!!

J'ai hâte de tester ça :)

Je te tiens au courant dès que possible !

De : Jean Abou Samra <[email-masked]>
À : [email-masked];
   [email-masked]
Sujet : Re: Images prises depuis Internet
Date : 05/07/2022 10:46:34 Europe/Paris

On 7/4/22 12:16, [email-masked] wrote:
> Si c'est très facile, je veux bien que tu me donnes un canevas de code !
>
> J'ai déjà créé le QR-code avec Inkscape
> Pour ma part, je ne vois "que" 841 lignes à donner.
> Et encore, si on dit que tout est blanc (par défaut), peut-être qu'il 
> suffirait de donner les coordonnées des cases noires uniquement ?

Voici une proposition :

\version "2.22.2"

#(define (index-map f . lsts)
   (let loop ((lsts lsts)
              (acc '())
              (i 0))
     (if (any null? lsts)
         (reverse! acc)
         (loop (map cdr lsts)
               (cons (apply f i (map car lsts))
                     acc)
               (1+ i)))))

#(define-markup-command (qr-code layout props data) (string?)
   #:properties ((width 10))
   (let* ((lines (reverse
                  (filter (lambda (s)
                            (not (string-null? s)))
                          (string-split data #\newline))))
          (n (length lines))
          (square-width (/ width n))
          (box (make-filled-box-stencil `(0 . ,square-width)
                                        `(0 . ,square-width))))
     (apply ly:stencil-add
            (index-map
             (lambda (i line)
               (apply ly:stencil-add
                      (index-map
                       (lambda (j char)
                         (ly:stencil-translate
                          (stencil-with-color
                           box
                           (case char
                            ((#\0)
                             white)
                            ((#\1)
                             black)
                            (else
                             (ly:warning "unrecognized character ~a, 
should be 0 or 1" char)
                             red)))
                          (cons (* j square-width)
                                (* i square-width))))
                      (string->list line))))
             lines))))

lilypondPointOrg =
"11111110011100011110101111111
10000010010000010111101000001
10111010010110001000101011101
10111010001010111101001011101
10111010110100000111001011101
10000010011100011001101000001
11111110101010101010101111111
00000000111000111110100000000
00110011101100001000111010000
10101001111000001000001111101
00110111010100000110001011010
01010001100110010111000110001
01111011110010011110010100111
01111101001101010001001101101
01111011000001000011001111011
11001001001011001000111011010
11100110111011011001110111000
00001100010001001011100100100
10111111011001010011001000100
00001100001000101011011011100
01010010000011000000111111111
00000000110011100010100011001
11111110101001101011101010110
10000010000110111110100010011
10111010011010111100111111111
10111010110001101111000011110
10111010100101101010100101001
10000010001001000100000010010
11111110010100110010111100010"

\markup \qr-code \lilypondPointOrg

\markup \vspace #5

\markup \override #'(width . 15) \qr-code \lilypondPointOrg

Au passage, j'ai trouvé le moyen d'éviter d'écrire moi-même
tous ces 0 et 1. J'ai installé le module Python pyqrcode,
et exécuté le code

import pyqrcode; 
print(pyqrcode.create("https://lilypond.org").text(quiet_zone=0))

Première étape pour le faire toi-même : installer Python.
Sous Linux, il est vraisemblablement déjà installer. Sous
macOS ou Windows, il faut le télécharger depuis https://www.python.org
(dans l'onglet « Downloads »).

Ensuite, il faut l'outil Pip pour installer des paquets.
Pour cela, il faut déjà savoir comment s'appelle le Python.
Sous Linux, sans doute python, mais peut-être python3 si
python est encore du Python 2 (à éviter). Pour le savoir,
taper la commande. Par exemple, j'obtiens

$ python
Python 3.10.5 (main, Jun  9 2022, 00:00:00) [GCC 12.1.1 20220507 (Red 
Hat 12.1.1-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.

J'ai 3.10, tout va bien. Sous macOS, ce sera probablement python3.
Sous Windows, essayer python et python3 (je ne sais plus comment
ça marche).

L'étape suivante est de faire l'installation de Pip :

$ la-commande-python -m ensurepip

Si cela dit que ensurepip est désactivé (il me semble que c'est le
cas sous Ubuntu au moins), installer Pip à travers le gestionnaire
de paquets du système (par exemple « sudo apt install python3-pip »).

Enfin, dernière étape :

$ la-command-python -m pip install pyqrcode

Il suffit pour finir de faire

$ la-command-python
[Le texte introductif s'affiche]
>>> import pyqrcode; print(pyqrcode.create("URL à 
remplir").text(quiet_zone=0))
[le résultat s'affiche]

Copier-coller, et le tour est joué.

Cordialement,
Jean

---

From: Jean Abou Samra <[email-masked]>
Date: Fri, 5 Aug 2022 00:06:01 +0200

Bonsoir David,

> Je confirme que le code marche très bien, je QR-code un max !

Content de l'entendre. C'est drôle que tu reparles de ce sujet 
aujourd'hui, Harm (contributeur et éditeur LSR) vient tout juste 
d'approuver ce code comme snippet dans la LSR (avec quelques 
modifications) :

https://lsr.di.unimi.it/LSR/Item?u=1&id=1153

> J'ai une remarque :
> Les environ 10 dernières lignes du QR-code généré par python rajoutent 
> des espaces après les chiffres (ils se colorent en rouge comme indiqué 
> dans le code)

Je ne vois pas ce qui peut se passer à première vue. Peux-tu donner le 
code exact que tu as tapé et sa sortie ? Tu es sûr que tu n'as pas 
oublié le quiet_zone=0 ?

Remarque : sur suggestion de Harm, le code finalement posté sur la LSR 
ne tient pas compte des espaces au début et à la fin d'une ligne (mais 
pas au milieu d'une ligne).

> Est-il possible de créer un QR-code certes moins fiable car moins 
> précis, mais avec moins de vérifications ?

C'est expliqué dans la documentation de pyqrcode :
https://pythonhosted.org/PyQRCode/create.html

En résumé, remplacer le code Python par

 >>> import pyqrcode; print(pyqrcode.create("https://lilypond.org", 
error="L").text(quiet_zone=0))

J'ai juste rajouté error="L", où "L" signifie Low (le plus faible niveau 
d'erreur). Bien sûr, il faut toujours remplacer https://lilypond.org par 
la cible du QR code. Le gain n'est pas extraordinaire non plus, sur 
l'exemple de https://lilypond.org on passe de 29×29 à 25×25, mais cela 
reste visible.

Cordialement,
Jean