Копировать изображение из командной строки в буфер обмена


22

Есть ли способ в bash, чтобы скопировать изображение в буфер обмена?

Например, если есть изображение, mypic.pngя хочу использовать такую ​​команду clipcopy mypic.png, чтобы я мог перейти, например, к inkscape и вставить его позже.


Это следует разбить на два этапа: 1. какие данные Inkscape ожидает в буфере обмена? Например, содержимое файла или путь к файлу. Я представляю содержание, так как путь тривиален с xsel -b? 2. Как получить эти данные в буфер обмена.
Сиро Сантилли 新疆 改造 中心 法轮功 六四 事件


Более общий вопрос для любого типа файла: superuser.com/questions/796376/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Если у вас установлен ImageMagick, я считаю, что команда convert ... clipboard:(... другие аргументы, включая ваше имя файла).
Deathgrip

Ответы:


9

Этот скрипт на python от cheshirekow утверждает, что делает то, что вы хотите.

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

Проверьте их вики для получения дополнительной документации и примеров использования .

Смотрите также:


Ваш первый вариант с использованием png прекрасно работает! Спасибо!
Edenshaw

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

Вот короткий скрипт bash, который используется xclipдля копирования файла. Должен быть в состоянии вставить с 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!
Кейван

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.