Скопіюйте зображення з командного рядка в буфер обміну


22

Чи є спосіб у баші скопіювати картинку до буфера обміну?

Наприклад, якщо є зображення, mypic.pngя хочу мати таку команду clipcopy mypic.png, що я можу перейти, наприклад, до Inkscape і вставити його згодом.


Це слід розбити в два етапи: 1. Які дані очікує, що Inkscape буде у буфері обміну? Наприклад, вміст файлу або шлях до файлу. Я уявляю зміст, оскільки шлях тривіальний xsel -b? 2. Як отримати ці дані в буфер обміну.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

можливий дублікат на веб-сайті: superuser.com/questions/301851/…
Ciro Santilli 新疆 改造 中心 法轮功 六四

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

Дякуємо, він працює на лібріофіс, однак вставлення в Inkscape не робить.
студент

Хороший, він добре працює з вставкою в журнал.
Keivan

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 відмінно працює! Дякую!
Еденшо

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"

Завдяки...


Це копіюється в офіс штрафу, але не в журнал!
Keivan

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