Salin gambar dari baris perintah ke papan klip

22

Apakah ada cara dalam bash untuk menyalin gambar ke clipboard?

Sebagai contoh jika ada gambar mypic.pngsaya ingin memiliki perintah clipcopy mypic.pngseperti sehingga saya bisa pergi misalnya ke inkscape dan tempel setelahnya.

mahasiswa
sumber
Ini harus dipecah dalam dua langkah: 1. data apa yang diharapkan Inkscape ada di clipboard? Misalnya konten file atau path file. Saya membayangkan konten karena jalurnya sepele xsel -b? 2. Cara mendapatkan data itu di clipboard.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
kemungkinan duplikat lintas situs: superuser.com/questions/301851/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
Pertanyaan yang lebih umum untuk semua jenis file: superuser.com/questions/796376/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
Jika Anda memasang ImageMagick, saya yakin perintahnya adalah convert ... clipboard:(... adalah argumen lain termasuk nama file Anda).
Deathgrip

Jawaban:

9

Skrip python ini oleh cheshirekow mengklaim untuk melakukan apa yang Anda inginkan.

#! /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
sumber
Terima kasih, ini berfungsi untuk melewati libreoffice, namun menempel ke inkscape tidak.
siswa
Bagus sekali, ini berfungsi baik dengan menempelkan ke xournal.
Keivan
9

Anda dapat menggunakan CopyQ untuk ini. Dari situs web:

Manajer Clipboard dengan fitur-fitur canggih

  • CopyQ adalah pengelola papan klip dengan riwayat yang dapat dicari dan diedit.
  • Mendukung Linux dan Windows.
  • Dukungan eksperimental untuk OS X 10.9+.
  • Simpan teks, HTML, gambar, dan format khusus lainnya.
  • Antarmuka baris perintah dan skrip lanjutan.

Untuk menyalin gambar (Anda perlu menunjukkan jenis MIME):

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

Untuk menyalin file data (Anda perlu menunjukkan tipe MIME):

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

Periksa wiki mereka untuk lebih banyak dokumentasi dan contoh penggunaan .

Lihat juga:

Landroni
sumber
Opsi pertama Anda menggunakan png sangat bagus! Terima kasih!
Edenshaw
5

Saya telah mengedit @don_crissti 's jawaban untuk memungkinkan masukan pipa:

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

Berikut ini skrip bash pendek yang digunakan xclipuntuk menyalin file. Harus bisa di-paste 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"

Terimakasih untuk...

jozxyqk
sumber
Ini salinan ke kantor baik-baik saja, tetapi tidak ke xournal!
Keivan