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.

estudiante
fuente
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 新疆 改造 中心 法轮功 六四 事件
posible duplicado entre sitios de: superuser.com/questions/301851/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
Pregunta más general para cualquier tipo de archivo: superuser.com/questions/796376/…
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]);
Mika Fischer
fuente
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:

Landroni
fuente
¡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)
wieczorek1990
fuente
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...

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