コマンドラインからクリップボードに画像をコピーします


22

bashで画像をクリップボードにコピーする方法はありますか?

たとえば、写真がある場合は、たとえばinkscapeに移動して後で貼り付けることができるmypic.pngようclipcopy mypic.pngなコマンドが必要です。


これは、2つのステップで分割する必要があります。1。Inkscapeがクリップボードに保存するデータは何ですか?たとえば、ファイルコンテンツまたはファイルパス。パスは簡単なので、コンテンツを想像しxsel -bますか?2.クリップボードでそのデータを取得する方法。
Ciro Santilli新疆改造中心法轮功六四事件


任意のファイルタイプのためのより一般的な質問:superuser.com/questions/796376/...
チロSantilli新疆改造中心法轮功六四事件

ImageMagickがインストールされている場合、コマンドはconvert ... clipboard:(...はファイル名を含む他の引数です)と思われます。
デスグリップ

回答:


9

cheshirekowによるこのpythonスクリプトは、あなたが望むことをすると主張しています。

#! /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]);

おかげで、libreofficeに貼り付けることができますが、inkscapeに貼り付けることはできません。
学生

良いことですが、xournalへの貼り付けに適しています。
ケイバン

9

これにはCopyQを使用できます。ウェブサイトから:

高度な機能を備えたクリップボードマネージャー

  • CopyQは、検索および編集可能な履歴を持つクリップボードマネージャーです。
  • LinuxおよびWindowsをサポートします。
  • OS X 10.9+の実験的サポート。
  • テキスト、HTML、画像、その他のカスタム形式を保存します。
  • 高度なコマンドラインインターフェイスとスクリプト。

画像をコピーするには(MIMEタイプを指定する必要があります):

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

データファイルをコピーするには(MIMEタイプを指定する必要があります):

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

その他のドキュメントと使用例については、Wikiを確認してください。

こちらもご覧ください:


pngを使用する最初のオプションは素晴らしい機能です!ありがとうございました!
エデンショー

5

@don_crissti回答を編集してパイプ入力を許可しました。

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

以下はxclip、ファイルのコピーに使用する短いbashスクリプトです。で貼り付けることができるはず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"

おかげで...


これはオフィスにコピーされますが、xournalにはコピーされません!
ケイバン

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.