将图像从命令行复制到剪贴板


22

有什么方法可以将图片复制到剪贴板吗?

例如,如果有图片,mypic.png我希望有一个类似的命令,clipcopy mypic.png例如,我可以进行墨迹绘制并将其粘贴。


这应该分为两个步骤:1. Inkscape希望剪贴板中包含哪些数据?例如文件内容或文件路径。我想内容是因为路径是无关紧要的xsel -b?2.如何在剪贴板上获取该数据。
Ciro Santilli新疆改造中心法轮功六四事件2014年



如果您安装了ImageMagick,我相信命令是convert ... clipboard:(...是其他参数,包括文件名)。
Deathgrip

Answers:


9

cheshirekow 编写此python脚本声称可以执行您想要的操作。

#! /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中。
Keivan'7

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

查看他们的Wiki以获取更多文档和用法示例

也可以看看:


使用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'7

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.