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


14

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

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


Что означает «вставить из буфера обмена из командной строки»? Вероятно, то же самое, но только для копирования: 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 ).


Как отмечено в первой ссылке: ПРИМЕЧАНИЕ. Некоторые исследования показывают, что вам нужен 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", {})

Немного раздражает, как вручную завершать его, но, по крайней мере, это работает :). Благодарность!
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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.