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.