Copiar imagem da linha de comando para a área de transferência

22

Existe uma maneira em um bash para copiar uma imagem para a área de transferência?

Por exemplo, se houver uma imagem, mypic.pngeu quero ter um comando como clipcopy mypic.pngesse, para que eu possa, por exemplo, acessar o inkscape e colá-lo posteriormente.

aluna
fonte
Isso deve ser dividido em duas etapas: 1. quais dados o Inkscape espera que estejam na área de transferência? Por exemplo, conteúdo ou caminho do arquivo. Eu imagino conteúdo, pois o caminho é trivial xsel -b? 2. Como obter esses dados na área de transferência.
Ciro Santilli escreveu
possível duplicata entre sites de: superuser.com/questions/301851/…
Ciro Santilli #
Pergunta mais geral para qualquer tipo de arquivo: superuser.com/questions/796376/…
Ciro Santilli #
Se você tem o ImageMagick instalado, acredito que o comando seja convert ... clipboard:(... são os outros argumentos, incluindo o seu nome do arquivo).
Deathgrip

Respostas:

9

Este script python de cheshirekow afirma fazer o que você deseja.

#! /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
fonte
Obrigado, ele funciona para colar no libreoffice, mas colar no inkscape não.
que você
Bom, ele funciona bem com colar no xournal.
19417 Keivan
9

Você pode usar o CopyQ para isso. A partir do site:

Gerenciador de área de transferência com recursos avançados

  • CopyQ é gerenciador de prancheta com histórico pesquisável e editável.
  • Suporta Linux e Windows.
  • Suporte experimental para OS X 10.9+.
  • Armazene texto, HTML, imagens e qualquer outro formato personalizado.
  • Interface avançada de linha de comando e scripts.

Para copiar uma imagem (você precisa indicar o tipo MIME):

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

Para copiar um arquivo de dados (você precisa indicar o tipo MIME):

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

Verifique o wiki para mais documentação e exemplos de uso .

Veja também:

landroni
fonte
Sua primeira opção usando png funciona muito bem! Obrigado!
Edenshaw
5

Eu editei @don_crissti 's resposta para permitir a entrada da tubulação:

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

Aqui está um pequeno script bash usado xclippara copiar um arquivo. Deve poder colar com 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"

Graças a...

jozxyqk
fonte
Isso copia muito bem no escritório, mas não no jornal!
19417 Keivan