Copie la imagen de la línea de comandos al portapapeles


22

¿Hay alguna manera en una fiesta de copiar una imagen al portapapeles?

Por ejemplo, si hay una imagen mypic.png, quiero tener un comando como clipcopy mypic.pngtal que pueda ir, por ejemplo, a inkscape y pegarla después.


Esto debe dividirse en dos pasos: 1. ¿Qué datos espera que Inkscape esté en el portapapeles? Por ejemplo, el contenido del archivo o la ruta del archivo. Me imagino contenido ya que la ruta es trivial con xsel -b? 2. Cómo obtener esos datos en el portapapeles.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件



Si tiene instalado ImageMagick, creo que el comando es convert ... clipboard:(... son los otros argumentos, incluido su nombre de archivo).
Deathgrip

Respuestas:


9

Este script de python de cheshirekow dice que hace lo que quiere.

#! /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]);

Gracias, funciona para pasar a libreoffice, pero pegar en inkscape no.
estudiante

Agradable, funciona bien pegando en xournal.
Keivan

9

Puede usar CopyQ para esto. Desde el sitio web:

Administrador de portapapeles con funciones avanzadas

  • CopyQ es un administrador de portapapeles con historial de búsqueda y editable.
  • Soporta Linux y Windows.
  • Soporte experimental para OS X 10.9+.
  • Almacene texto, HTML, imágenes y cualquier otro formato personalizado.
  • Interfaz avanzada de línea de comandos y secuencias de comandos.

Para copiar una imagen (debe indicar el tipo MIME):

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

Para copiar un archivo de datos (debe indicar el tipo MIME):

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

Consulte su wiki para obtener más documentación y ejemplos de uso .

Ver también:


¡Tu primera opción con png funciona muy bien! ¡Gracias!
Edenshaw

5

He editado @don_crissti 's de respuesta para permitir la entrada de la tubería:

#!/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

Aquí hay un breve script de bash que se utiliza xclippara copiar un archivo. Debería poder pegar con 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"

Gracias a...


Esto copia en la oficina bien, pero no en xournal!
Keivan

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.