Comment copier une image dans le presse-papiers à partir d'un fichier en utilisant la ligne de commande?

23

Je voudrais écrire un script pour prendre un fichier image, le redimensionner à 50% et le mettre dans le presse-papiers pour qu'il puisse être collé facilement. Le bit sur lequel je suis coincé est de savoir comment placer une image dans le presse-papiers.

Je connais xclip, mais AFAICS qui ne traite que du texte. Est-il possible d'avoir une image dans le presse-papiers sans l'application qui l'a générée? - Désolé, je ne suis pas sûr de l'intérieur du fonctionnement du presse-papiers!

MODIFIER

Grâce à la réponse de Florian ci-dessous, j'ai pu réaliser ce que je voulais, qui était de prendre une capture d'écran et de l'adapter automatiquement à une largeur maximale de 600 pixels (par exemple pour le coller dans un e-mail). Le problème supplémentaire que j'ai rencontré était que Thunderbird n'accepterait pas image/pngdu presse-papiers. J'ai contourné cela en le convertissant text/htmlavec une dataURL. Voici mon code au cas où quelqu'un le trouverait utile:

#!/bin/bash
TMP=/tmp/screenshot.png
function screenshotfail {
  notify-send -u low -i image "Screenshot failed."
  exit
}
# Take screenshot
gnome-screenshot -a -b -p -f "$TMP" || screenshotfail
# Ensure it's max 600px wide
mogrify -resize '>600x' "$TMP" || screenshotfail
# optimise the png if optipng is installed.
which optipng >/dev/null && optipng "$TMP"

# Copy to clipboard.
#
# This is what does not work for Thunderbird:
#   xclip -selection clipboard -t image/png <"$TMP" || screenshotfail
# But this does:
echo "<img src='data:image/png;base64,"$(base64 -w0 "$TMP")"' />" | \
  xclip -selection clipboard -t text/html || screenshotfail

# Remove the temp file.
rm -f "$TMP"

# Notify user.
notify-send -u low -i image "600px screenshot copied to clipboard"
artfulrobot
la source
Semble un doublon de: unix.stackexchange.com/questions/30093/…
Champ

Réponses:

32

Utilisez l' -toption pour spécifier le type de contenu, comme

xclip -selection clipboard -t image/png -i example.png
Florian Diesch
la source
-tne fonctionne pas sur ma version xclip 0.12
Irfan
@ Power-Inside: Fonctionne pour moi avec xclip 0.12 le 16.10
Florian Diesch
1
pour que cela fonctionne le 17.10, je devais faire ceci:xclip -selection clipboard -t image/png -o > example.png
Anake
Fonctionne avec xclip version 0.12 sur mon Ubuntu 16.04.5 LTS
Champ
Fonctionne uniquement pour les environnements GTK comme Gnome, pas pour les environnements Qt comme KDE / plasma ou LXQT.
noraj