Subject: Images prises depuis Internet

From: [email-masked]
Date: Wed, 29 Jun 2022 09:36:38 +0200 (CEST)

Bonjour,

Je sais insérer une image dans un markup :

\markup { \epsfile #X #8 #"image.eps" }

Dans ce cas, il faut que l'image soit sur le disque dur de l'utilisateur...

Ma question : Est-il possible de mettre une adresse internet à la place ?

un truc du genre :

\markup { \epsfile #X #8 #"http://monsite.fr/image.eps" }

D'avance merci pour vos réponses,

David

---

From: Jean Abou Samra <[email-masked]>
Date: Wed, 29 Jun 2022 09:48:23 +0200

Bonjour,

(Pense à donner un titre à ton message à l'avenir afin qu'on
se souvienne facilement de ce dont il s'agit dans son courrielleur.)

> \markup { \epsfile #X #8 #"http://monsite.fr/image.eps" }

Qu'entends-tu par là ? Télécharger l'image automatiquement
lors de la compilation du .ly et l'inclure ? Ou bien inclure
un lien dans le PDF ?

Télécharger l'image à la compilation n'est pas possible à
ma connaissance, du moins pas en 2.23 avec les binaires
officielles, pour la simple et bonne raison que ces binaires
sont compilées avec une version de Guile sans les fonctionnalités
liées au réseau, pour des raisons de sécurité. Il suffit
de télécharger l'image une bonne fois pour toutes.

À ma connaissance, le PDF ne permet pas d'intégrer à la
manière du HTML une image Internet qui soit chargée par
la liseuse de PDF au moment de l'affichage. Par contre,
il reste possible de mettre un lien :

\markup { Voir l'image sur \with-url "https://monsite.fr/image.eps" "mon
site Internet" }

Cordialement,
Jean

---

From: Jean Abou Samra <[email-masked]>
Date: Wed, 29 Jun 2022 20:20:06 +0200

Le 29/06/2022 à 09:48, Jean Abou Samra a écrit :
> liées au réseau, pour des raisons de sécurité.

Toutes mes excuses, j'ai dit une bêtise. Bien que les fonctionnalités
de réseau soient désactivées à l'intérieur de Guile, il est toujours
possible d'exécuter des commandes du système qui, elles, y ont accès.
Par exemple, sous GNU/Linux, ce genre de truc devrait marcher :

\version "2.23.11"

from-network =
#(let ((keep-these '()))
    (define-scheme-function (url) (string?)
      (let* (;; Un fichier temporaire
             (port (mkstemp! "/tmp/from-network-XXXXXX"))
             ;; Le nom de ce fichier
             (filename (port-filename port)))
        ;; Il est prudent de s'assurer qu'aucun autre processus n'écrit dans
        ;; ce fichier entre le moment où il est écrit par wget et le moment
        ;; où LilyPond le lit. Pour cela, on place le port dans une
liste qui
        ;; n'est jamais effacée. Cela empêche le port d'être effacé, ce
qui le
        ;; garde ouvert.
        (set! keep-these (cons port keep-these))
        ;; Le téléchargement
        (system* "wget" url "-O" filename)
        filename)))

\markup \epsfile #X #20 \from-network
"https://people.sc.fsu.edu/~jburkardt/data/ps/bell_206.ps"

Néanmoins, je ne le recommande pas vraiment dans la mesure où
cela fait un téléchargement de l'image à chaque compilation.
Autant faire le téléchargement une fois.

Cordialement,
Jean

---

From: Ya Gloops <[email-masked]>
Date: Thu, 30 Jun 2022 07:38:21 +0000 (UTC)

Bonjour !
Ca ne fonctionne pas chez moi, mais je ne suis qu'en version 2.23.10, c'est peut être pour ça...
D'une manière générale, comme on fait avec "\epsfile", peut on importer d'autres format que *.eps, par exemple *.png ou *.jpg ?

Gilles

Le mercredi 29 juin 2022 à 20:20:30 UTC+2, Jean Abou Samra <[email-masked]> a écrit : 

\version "2.23.11"

from-network =
#(let ((keep-these '()))

Cordialement,
Jean

---

From: Jean Abou Samra <[email-masked]>
Date: Thu, 30 Jun 2022 10:21:46 +0200

Bonjour Gilles,

> Ca ne fonctionne pas chez moi, mais je ne suis qu'en version 2.23.10, c'est peut être pour ça...

Quel est le message d'erreur ? Pour moi, ça marche aussi en 2.23.10.

Vu la manière dont mon message est cité dans ta réponse, je me demande si
des retours à la ligne intempestifs ont ajouté comme code des mots qui
faisaient partie des commentaires. Peux-tu essayer comme ceci ?

\version "2.23.10"

from-network =
#(let ((keep-these '()))
    (define-scheme-function (url) (string?)
      (let* (#| Un fichier temporaire |#
             (port (mkstemp! "/tmp/from-network-XXXXXX"))
             #| Le nom de ce fichier |#
             (filename (port-filename port)))
        #| Il est prudent de s'assurer qu'aucun autre processus n'écrit dans
           ce fichier entre le moment où il est écrit par wget et le moment
           où LilyPond le lit. Pour cela, on place le port dans une
liste qui
           n'est jamais effacée. Cela empêche le port d'être effacé, ce
qui le
           garde ouvert. |#
        (set! keep-these (cons port keep-these))
        #| Le téléchargement |#
        (system* "wget" url "-O" filename)
        filename)))

> D'une manière générale, comme on fait avec "\epsfile", peut on importer d'autres format que *.eps, par exemple *.png ou *.jpg ?

À l'heure actuelle, non. Il faut convertir l'image en EPS, par exemple
avec ImageMagick :

convert fichier.png fichier.eps

(et donc plutôt : non sauf à faire le même genre de chose pour faire la
conversion
au moment de la compilation, ce que je ne recommande pas forcément non
plus).
Par contre, à moyen terme, il n'est pas impossible que cela soit pris en
charge,
grâce au backend Cairo tout nouveau tout beau.

Cordialement,
Jean

---

From: Ya Gloops <[email-masked]>
Date: Thu, 30 Jun 2022 08:37:20 +0000 (UTC)

"Quel est le message d'erreur ? Pour moi, ça marche aussi en 2.23.10."

Analyse...ERROR: In procedure mkstemp!:

In procedure mkstemp!: No such file or directory

Arrêté avec le code de retour 1.

J'ai le même message d'erreur!
J'ai essayé en enlevant tous les commentaires idem.
En enregistrant les fichier .ly pour éviter le dossier "temp" idem...

"Par contre, à moyen terme, il n'est pas impossible que cela soit pris en
charge,
grâce au backend Cairo tout nouveau tout beau."

Vive le backend Cairo !!! ;-)

Le jeudi 30 juin 2022 à 10:21:48 UTC+2, Jean Abou Samra <[email-masked]> a écrit : 

Bonjour Gilles,

\version "2.23.10"

from-network =
#(let ((keep-these '()))

Cordialement,
Jean

---

From: Jean Abou Samra <[email-masked]>
Date: Thu, 30 Jun 2022 22:24:12 +0200

> In procedure mkstemp!: No such file or directory

On dirait qu'il n'y a pas de /tmp chez toi. Tu es bien sous Linux ?
Sous Windows ou macOS, il faudrait remplacer "/tmp/from-network-XXXXXX"
par un chemin vers un dossier temporaire. Je ne m'y connais pas trop.
Quel ton système ?

Cordialement,
Jean

---

From: yagloops <[email-masked]>
Date: Thu, 30 Jun 2022 22:30:54 +0200

Effectivement ça doit être pour ça je suis sous windows 10 …