CLI One-Liner
Je n'appellerais pas nécessairement cela simple mais c'est une sorte de hack amusant. Cette solution fonctionne sous Linux et nécessite xclip
, xmllint
y curl
.
Il suffit d'effectuer une "copie" du document Google comme d'habitude (Ctrl+c ou clic droit et Copier sur l'image), puis d'exécuter une commande CLI en une ligne dans un terminal pour "fixer" le presse-papiers afin qu'il contienne l'image réelle.
Contexte
Lorsque vous copiez une image depuis un document Google dans Chrome, le presse-papiers contient les types de données suivants :
$ xclip -selection clipboard -o -t TARGETS
TIMESTAMP
TARGETS
SAVE_TARGETS
MULTIPLE
chromium/x-web-custom-data
text/html
Ok, on a un peu de HTML là-dedans, et en inspectant ça, on a une img
avec une URL source. Il ne nous reste donc plus qu'à extraire l'URL du HTML, à la télécharger via curl et à renvoyer cette sortie dans le presse-papiers !
Solution
C'est parti :
curl \
$(xclip -selection clipboard -o -t text/html \
| xmllint --html -xpath "string(//img/@src)" -) -o - \
| xclip -selection clipboard -target image/png
Explication
Je décompose ça en plusieurs parties :
- El
xclip -selection clipboard -o -t text/html
extrait le HTML du presse-papiers et l'écrit sur la sortie standard.
- Cette sortie HTML est acheminée par
xmllint --html -xpath "string(/html/body//img/@src)" -
afin d'extraire l'URL de la sortie standard, qui pointe vers un serveur de contenu Google Docs.
- L'URL est fournie en tant que paramètre à
curl
qui télécharge le contenu et l'écrit sur la sortie standard.
- Les données d'image téléchargées sont renvoyées dans le presse-papiers sous la forme d'un fichier de type
image/png
via xclip -selection clipboard -target image/png
.
Notez que nous supposons à l'étape 4 que l'image est un PNG, ce qui semble être une hypothèse juste pour les images stockées dans Google Docs. Si cette hypothèse ne se vérifie pas, des variations sur ce thème sont bien sûr possibles. Nous mettons en mémoire tampon la sortie de curl dans un fichier temporaire, l'inspectons par le biais de la fonction file
puis de définir la cible du presse-papiers de manière appropriée, ce qui peut être facilement programmé.