¿Cómo copiar una imagen al portapapeles desde la línea de comandos en Linux?

14

Puedo copiar la imagen en Gimp y pegarla en el documento de OpenOffice.

¿Cómo hacerlo (copiar o pegar imagen) desde la línea de comando?

Vi.
fuente
¿Qué significa "pegar desde el portapapeles desde la línea de comandos"? Probablemente lo mismo pero solo para copia: unix.stackexchange.com/questions/30093/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
Pregunta más general para cualquier tipo de archivo: superuser.com/questions/796376/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Respuestas:

5

Como se encuentra aquí , la clave para pegar datos binarios en un archivo xclipes decir qué tipos de medios tiene en el portapapeles. Para PNG puedes:

xclip -selection clipboard -t image/png -o > "`date '+%Y-%m-%d_%T'`.png"

O image/jpegy .jpgpara JPEG.

Así que ahora en mi ~/Dropbox/.mybashrcagrego un alias (clipboard2photo) para pegar fácilmente en el archivo de imagen (tal vez algún día lo tengamos en Nautilus ).

pabloab
fuente
Como se señaló en el primer enlace: NOTA: Algunas investigaciones muestran que necesita xclip de la revisión 81 de SVN (desde abril de 2010) o posterior para tener la opción -t requerida. O aplique los parches usted mismo.
i336_
7

Creo que la razón por la cual el script Leo Alekseyev no funciona a veces (en algunos sistemas) se explica en esta respuesta a una pregunta similar. Parte importante citada aquí:

Una rareza que es diferente de la mayoría de los otros sistemas: si el programa que posee la selección (portapapeles) desaparece, también lo hace la selección.

Cuando ejecuto el script de Leo en Python Shell, funciona, siempre y cuando el shell se esté ejecutando. Así que creo que los datos del portapapeles se pierden cuando finaliza el script. La solución publicada en la respuesta está funcionando para mí:

#!/usr/bin/env python
import gtk 
import sys

count = 0
def handle_owner_change(clipboard, event):
    global count
    print 'clipboard.owner-change(%r, %r)' % (clipboard, event)
    count += 1
    if count > 1:
       sys.exit(0)

image = gtk.gdk.pixbuf_new_from_file(sys.argv[1])
clipboard = gtk.clipboard_get()
clipboard.connect('owner-change', handle_owner_change)
clipboard.set_image(image)
clipboard.store()
gtk.main()

Actualización desde _Vi: para completar, agregar el portapapeles-> script de archivo:

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

clipboard = gtk.clipboard_get()
img = clipboard.wait_for_image()
img.save(sys.argv[1], "png", {})
wnm
fuente
Es un poco molesto cómo tener que salir manualmente, pero al menos funciona :). ¡Gracias!
crazy2be
1

El siguiente script python / pygtk hace el trabajo:

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

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

(Fuente: http://ubuntuforums.org/showthread.php?t=1689889 )

Para usar esto, sudo apt-get install python pygtkpegue el código anterior en un script, chmod +xpara que sea ejecutable, y debería estar listo.

Leo Alekseyev
fuente
Se copió una pequeña imagen png con este script. No se puede pegar ni en OpenOffice ni en Gimp ("No hay datos de imagen en el portapapeles para pegar"). No trabajes Después de copiar la imagen real en Gimp y usar esta secuencia de comandos, el búfer vuelve al texto anterior.
Vi.
Acabo de intentar: wget http://upload.wikimedia.org/wikipedia/commons/d/d9/Test.png && ./test.py Test.pngdonde test.py es exactamente lo que se pega aquí. Se pega bien en Gimp.
Leo Alekseyev
Probado con Test.png. "No hay datos de imagen en el portapapeles para pegar". ¿Depende de ejecutar Gnome? ¿Cómo depurar esto? Puedo copiar con éxito la imagen en Gimp y pegarla en Openoffice, por lo que, en general, la copia funciona.
Vi.
E: No se puede localizar el paquete pygtk
qed