Subject: Re: Images prises depuis Internet

From: [email-masked]
Date: Mon, 4 Jul 2022 12:16:12 +0200 (CEST)

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 ?

David

> Il est vrai que la majorité des gens autour de moi, cherchent "google" 
> dans la barre de recherche google quand ils ont besoin d'un moteur de 
> recherche.
> Par contre, le QR-code est simplissime pour tout le monde... desfois 
> il ne faut pas chercher à comprendre !
>
> j'avais vu passer un fil pour joindre le .ly au pdf, c'est dans ma 
> todo-liste, et j'avais lu que c'était pas grand chose à faire !
>
> ok pour la complexité du codage, je vais me rabattre sur le zip !
> j'imaginais qu'on pouvait juste dire un truc du genre : fais un carré 
> x=29 y=29
> puis noircir ou non les coordonnées par exemple (1;1)=0 ; (2;1)=1 ...etc
> et à la fin dire un pourcentage de taille pour l'affichage du carré 
> sur la page...
> parfois je n'ai pas conscience des difficultés de codage ^^'

Ça, c'est très facile à faire. Par contre, sauf à ce que l'utilisateur 
entre soi-même les valeurs blanc ou noir pour chaque petit carré (il y 
en a tout de même 29×29 = 841), il faut passer de l'URL à cet encodage 
sous forme de grille. Et là, c'est moins trivial à cause de la méthode 
utilisée par les QR-codes pour la correction d'erreurs. Un QR-code reste 
lisible même si quelques uns des « pixels » ne peuvent pas être lus, par 
exemple si l'image est floue. La méthode particulière s'appelle les 
codes correcteurs d'erreurs de Reed-Solomon. Pour implémenter ça, il 
faut déjà l'arithmétique sur le corps F256 avec de la division 
euclidienne de polynômes (ne m'embarque pas dans une explication de ce 
que c'est). Rien d'infaisable, mais il y a quand même un peu de travail.

Cordialement,
Jean

---

From: Jean Abou Samra <[email-masked]>
Date: Tue, 5 Jul 2022 10:46:34 +0200

On 7/4/22 12:16, [email-masked] wrote:
> 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: [email-masked]
Date: Tue, 5 Jul 2022 11:23:56 +0200 (CEST)

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

Voici une proposition :

\version "2.22.2"

lilypondPointOrg =

\markup \vspace #5

import pyqrcode; 

$ python

Enfin, dernière étape :

$ la-command-python

Cordialement,
Jean