Як скопіювати зображення в буфер обміну з командного рядка в Linux?


14

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

Як це зробити (скопіювати або вставити зображення) з командного рядка?


Що означає минуле "вставлення з буфера обміну з командного рядка"? Можливо, те саме, але лише для копії: unix.stackexchange.com/questions/30093/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Більш загальне питання для будь-якого типу файлів: 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: для повноти додавання буфера обміну-> сценарій файлу:

#!/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
ч.т.д.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.