【问题标题】:python PyGObject :how to save clipboard as imagepython PyGObject:如何将剪贴板保存为图像
【发布时间】:2021-05-18 04:13:52
【问题描述】:

我在 linux 中有一个快照工具,我将那里的图像复制到剪贴板中

现在我想保存。我无法理解如何完成这些步骤。我写了我能理解的直到

我想用 pyObject 来做

import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gdk
clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)

之后如何将图片保存到/home/user/filename.png

【问题讨论】:

    标签: python-3.x pygobject


    【解决方案1】:

    正如this SO 上的帖子中所讨论的,对Gtk.Clipboard.get() 的调用需要一个参数来标识剪贴板。因此,要从剪贴板中获取图像,您必须调用wait_for_image()。这将返回一个 pixbuf 对象。

    为了将此 pixbuf 对象作为 .png 保存到磁盘,您可以使用从用户 mozbugbox 的 this GitHub Gist 获取的 pixbuf2image(pix) 函数将其转换为 Pillow 图像对象。然后,Pillow 图像对象有一个 save() 方法将图像直接保存到磁盘。

    import gi
    from PIL import Image as PILImage
    gi.require_version("Gtk", "3.0")
    from gi.repository import Gtk, Gdk
    
    def pixbuf2image(pix):
        """Convert gdkpixbuf to PIL image"""
        data = pix.get_pixels()
        w = pix.props.width
        h = pix.props.height
        stride = pix.props.rowstride
        mode = "RGB"
        if pix.props.has_alpha == True:
            mode = "RGBA"
        im = PILImage.frombytes(mode, (w, h), data, "raw", mode, stride)
        return im
    
    clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
    
    pixbuf_img = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD).wait_for_image()
    pil_image = pixbuf2image(pixbuf_img)
    pil_image.save(str(imgpath))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-21
      • 1970-01-01
      • 1970-01-01
      • 2020-05-05
      • 1970-01-01
      相关资源
      最近更新 更多