web-dev-qa-db-fra.com

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

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

Je connais xclip, mais AFAICS 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 du fonctionnement interne du presse-papiers!

MODIFIER

Grâce à la réponse de Florian ci-dessous, j'ai pu réaliser ce que je voulais, à savoir prendre une capture d'écran et la redimensionner automatiquement jusqu'à une largeur maximale de 600 pixels (par exemple, pour le coller dans un courrier électronique). Le problème supplémentaire que j'ai rencontré était que Thunderbird n'accepterait pas image/png dans le presse-papiers. J'ai résolu ce problème en le convertissant en text/html avec une URL data. 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"
22
artfulrobot

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

xclip -selection clipboard -t image/png -i example.png
29
Florian Diesch