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.


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 新疆 改造 中心 法轮功 六四 事件



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

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:


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)

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...


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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.