Copier l'image de la ligne de commande dans le presse-papiers

22

Existe-t-il un moyen dans un bash de copier une image dans le presse-papiers?

Par exemple, s'il y a une image, mypic.pngje veux avoir une commande clipcopy mypic.pngtelle que je peux par exemple aller dans inkscape et la coller ensuite.

étudiant
la source
Cela devrait être divisé en deux étapes: 1. Quelles données Inkscape s'attend-il à trouver dans le presse-papiers? Par exemple, le contenu ou le chemin du fichier. J'imagine le contenu puisque le chemin est trivial avec xsel -b? 2. Comment obtenir ces données dans le presse-papiers.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
doublon possible entre sites de: superuser.com/questions/301851/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
Question plus générale pour tout type de fichier: superuser.com/questions/796376/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
Si ImageMagick est installé, je pense que la commande est convert ... clipboard:(... sont les autres arguments, y compris votre nom de fichier).
Deathgrip

Réponses:

9

Ce script python de cheshirekow prétend faire ce que vous voulez.

#! /usr/bin/python
import pygtk
pygtk.require('2.0')
import gtk
import os
import sys

def copy_image(f):
    assert os.path.exists(f), "file does not exist"
    image = gtk.gdk.pixbuf_new_from_file(f)

    clipboard = gtk.clipboard_get()
    clipboard.set_image(image)
    clipboard.store()

copy_image(sys.argv[1]);
Mika Fischer
la source
Merci, cela fonctionne à coller dans libreoffice, mais pas dans Inkscape.
étudiant
Sympa, cela fonctionne bien avec le collage dans xournal.
Keivan
9

Vous pouvez utiliser CopyQ pour cela. Depuis le site Web:

Gestionnaire de presse-papiers avec des fonctionnalités avancées

  • CopyQ est un gestionnaire de presse-papiers avec un historique consultable et modifiable.
  • Prend en charge Linux et Windows.
  • Prise en charge expérimentale pour OS X 10.9+.
  • Stockez du texte, du HTML, des images et tout autre format personnalisé.
  • Interface de ligne de commande et scripts avancés.

Pour copier une image (vous devez indiquer le type MIME):

copyq write image/png - < file.png && copyq select 0

Pour copier un fichier de données (vous devez indiquer le type MIME):

copyq write application/pdf - < file.pdf && copyq select 0

Consultez leur wiki pour plus de documentation et d'exemples d'utilisation .

Voir également:

landroni
la source
Votre première option en utilisant png fonctionne très bien! Merci!
Edenshaw
5

J'ai édité la réponse de @don_crissti pour autoriser l'entrée de pipe:

#!/usr/bin/env python

import sys
from gi.repository import Gtk, Gdk, GdkPixbuf

def store(pixbuf):
        clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
        clipboard.set_image(pixbuf)
        clipboard.store()

def copy_image(f):
    image = Gtk.Image.new_from_file(f)
    if image.get_storage_type() == Gtk.ImageType.PIXBUF:
        pixbuf = image.get_pixbuf()
        store(pixbuf)
    else:
        print("Copying failed")

def copy_pixbuf(data):
    loader = GdkPixbuf.PixbufLoader()
    loader.write(data)
    loader.close()
    pixbuf = loader.get_pixbuf()
    store(pixbuf)

if sys.stdin.isatty():
    if len(sys.argv) != 2:
        print("Usage: image-to-clipboard.py image")
    else:
        f = sys.argv[1]
        copy_image(f);
else:
    data = sys.stdin.read()
    copy_pixbuf(data)
wieczorek1990
la source
5

Voici un court script bash qui permet xclipde copier un fichier. Doit pouvoir coller avec ctrl-v.

#!/bin/bash
command -v xclip >/dev/null 2>&1 || { echo "Need command xclip. Aborting." >&2; exit 1; }
[[ -f "$1" ]] || { echo "Error: Not a file." >&2; exit 1; }
TYPE=$(file -b --mime-type "$1")
xclip -selection clipboard -t "$TYPE" < "$1"

Grâce à...

jozxyqk
la source
Cela copie bien dans le bureau, mais pas dans xournal!
Keivan