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

14

Я могу скопировать изображение в Gimp и вставить его в документ OpenOffice.

Как это сделать (скопировать или вставить изображение) из командной строки?

Vi.
источник
Что означает «вставить из буфера обмена из командной строки»? Вероятно, то же самое, но только для копирования: unix.stackexchange.com/questions/30093/…
Сиро Сантилли 新疆 14 中心 法轮功 六四 事件
Более общий вопрос для любого типа файла: superuser.com/questions/796376/…
Ciro Santilli 事件 改造 中心 法轮功 六四 事件

Ответы:

5

Как показано здесь , ключ для вставки двоичных данных в файл xclip- это указать, какие типы носителей у вас есть в буфере обмена. Для PNG вы можете:

xclip -selection clipboard -t image/png -o > "`date '+%Y-%m-%d_%T'`.png"

Или image/jpegи .jpgдля JPEG.

Так что теперь ~/Dropbox/.mybashrcя добавляю псевдоним (clipboard2photo) для легкой вставки в файл изображения (возможно, когда-нибудь он будет у нас на Nautilus ).

pabloab
источник
Как отмечено в первой ссылке: ПРИМЕЧАНИЕ. Некоторые исследования показывают, что вам нужен xclip из SVN ревизии 81 (с апреля 2010 г.) или новее, чтобы иметь обязательную опцию -t. Или примените патчи самостоятельно.
i336_
7

Я считаю, что причина, по которой сценарий Льва Алексеева иногда не работает (в некоторых системах), объясняется в этом ответе на аналогичный вопрос. Важная часть цитируется здесь:

Одна странность, которая отличается от большинства других систем: если программа, владеющая выделением (буфер обмена), исчезает, то же самое происходит и с выделением.

Когда я запускаю скрипт Лео в оболочке Python, он работает, пока работает оболочка. Поэтому я думаю, что данные буфера обмена теряются, когда скрипт завершается. Решение, опубликованное в ответе, работает на меня:

#!/usr/bin/env python
import gtk 
import sys

count = 0
def handle_owner_change(clipboard, event):
    global count
    print 'clipboard.owner-change(%r, %r)' % (clipboard, event)
    count += 1
    if count > 1:
       sys.exit(0)

image = gtk.gdk.pixbuf_new_from_file(sys.argv[1])
clipboard = gtk.clipboard_get()
clipboard.connect('owner-change', handle_owner_change)
clipboard.set_image(image)
clipboard.store()
gtk.main()

Обновление от _Vi: для полноты добавьте скрипт clipboard-> file:

#!/usr/bin/python
import gtk, pygtk
pygtk.require('2.0')
import sys, os

clipboard = gtk.clipboard_get()
img = clipboard.wait_for_image()
img.save(sys.argv[1], "png", {})
Wnm
источник
Немного раздражает, как вручную завершать его, но, по крайней мере, это работает :). Благодарность!
crazy2be
1

Следующий скрипт python / pygtk выполняет свою работу:

#!/usr/bin/python
import gtk, pygtk
pygtk.require('2.0')
import sys, os

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

(Источник: http://ubuntuforums.org/showthread.php?t=1689889 )

Чтобы использовать это, sudo apt-get install python pygtkвставьте приведенный выше код в скрипт, chmod +xчтобы сделать его исполняемым, и все будет хорошо.

Лев Алексеев
источник
Скопировал маленькую картинку png, используя этот скрипт. Невозможно вставить его ни в OpenOffice, ни в Gimp («В буфер обмена нет данных для вставки»). Не работает После копирования реальной картинки в Gimp и использования этого скрипта буфер возвращается к тексту, который был до этого.
Ви.
Я только что попробовал:, wget http://upload.wikimedia.org/wikipedia/commons/d/d9/Test.png && ./test.py Test.pngгде test.py это именно то, что здесь вставлено. Хорошо вставляет в Gimp.
Лев Алексеев
Пробовал с Test.png. Msgstr "В буфере обмена нет данных для вставки". Это зависит от запуска Gnome? Как это отладить? Я могу успешно скопировать изображение в Gimp и вставить в Openoffice, так что в целом копирование работает.
Ви.
E: Невозможно найти пакет pygtk
qed