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.


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 新疆 改造 中心 法轮功 六四 事件



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]);

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:


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)

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 à...


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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.