¿Cómo agregar / obtener datos de imágenes en el portapapeles del sistema operativo usando Python?

Tengo un código Python que edita archivos de imagen y me gustaría saber cómo
para agregar datos de imagen al portapapeles del sistema operativo y obtenerlos desde allí.

Al buscar una solución multiplataforma para reemplazar u obtener texto del portapapeles en Python,
hubo muchas respuestas simples para hacerlo (por ejemplo, usando el módulo Tkinter incorporado con algún código ).
Sin embargo, estos métodos solo pueden usar texto sin formato, no otros datos del portapapeles como imágenes.

Mi versión de Python es 3.x en Windows pero la respuesta debe ser multiplataforma
(funciona en diferentes sistemas operativos) y también debe admitir otras versiones de Python como 2.x.
Creo que solo debería usar módulos Python incorporados y el código no debería ser demasiado complejo (o tener una explicación de lo que hace). Puede ser un módulo de Python porque los archivos se pueden incluir en la misma carpeta que el código del progtwig portátil para evitar la instalación.

Hay otras preguntas relacionadas con esta que probablemente funcionan con imágenes, pero que solo admiten un sistema operativo individual. ¿Los mejores fueron Copiar imagen al portapapeles en Python3 y Escribir imagen al portapapeles de Windows en Python con PIL y win32clipboard? .
Los métodos descritos allí (solo para Windows) parecen utilizar los siguientes pasos:

  • Obtenga datos binarios en bruto de la imagen: el método carga un archivo de imagen con Python Imaging
    Módulo de biblioteca ( PIL / Almohada ) porque tiene otras funciones de procesamiento que se usarán más adelante, de una manera sencilla
    y popular API estándar. Esto podría hacerse con un módulo diferente en su lugar (por ejemplo, Pygame ).
  • Cree una variable de objeto de archivo (para la transmisión de entrada / salida en memoria), usando el io incorporado
    módulo. Para Python 2.x, from cStringIO import StringIO se usa la from cStringIO import StringIO pero con Python 3, el
    Se io.BytesIO mejor tipo de objeto de flujo binario io.BytesIO ; ahora los más antiguos solo permiten texto.
  • Guarde los datos de la imagen, en el formato de archivo BMP (Mapa de bits de Windows / Mapa de bits independiente del dispositivo),
    a la variable de objeto de archivo del paso anterior. El método que usa PIL / Pillow primero convierte.
    estos datos con .convert("RGB") en la variable que lo contiene.
  • Obtenga el contenido completo del búfer de memoria variable de objeto de archivo como datos binarios (objeto de bytes ),
    divídalo desde la posición 14 para eliminar el encabezado de 14 bytes del formato de archivo BMP / DIB, luego guárdelo
    como una variable. El método dice que la división de estos datos funciona en sistemas de 32 o 64 bits, pero
    necesita la API del portapapeles de Windows, por lo que no funciona con un formato de archivo diferente.
  • Cierre el búfer de memoria y copie los datos de la imagen del paso anterior al portapapeles.
    El método hace esto en Windows usando la parte win32clipboard de un módulo de extensión –
    abre el portapapeles para su uso, lo borra, establece su valor en la variable de datos de imagen desde el
    El paso anterior (utilizando el tipo BMP / DIB) luego cierra el portapapeles abierto.

Además, hay un módulo de texto de portapapeles multiplataforma simple llamado Pyperclip , que es
solo un archivo para la versión 1.5.6 y tal vez tenga un código que pueda procesar datos de imagen.

No creo que puedas interactuar con el portapapeles sin un módulo externo.

Las API del portapapeles son diferentes de los diferentes sistemas operativos.

Te sugiero que uses el módulo portapapeles.

https://pypi.python.org/pypi/clipboard/0.0.4

La biblioteca de xerox es simple y capaz.

Aquí hay una función de Python basada en esta respuesta que reemplaza / devuelve el texto del portapapeles usando Tkinter .

 def use_clipboard(paste_text=None): import tkinter # For Python 2, replace with "import Tkinter as tkinter". tk = tkinter.Tk() tk.withdraw() if type(paste_text) == str: # Set clipboard text. tk.clipboard_clear() tk.clipboard_append(paste_text) try: clipboard_text = tk.clipboard_get() except tkinter.TclError: clipboard_text = '' r.update() # Stops a few errors (clipboard text unchanged, command line program unresponsive, window not destroyed). tk.destroy() return clipboard_text 

Este método crea una ventana oculta rápidamente que se cierra rápidamente para
Eso no debería ser un problema. Además, solo soporta el uso de texto plano en la
Portapapeles, no imágenes que pedí en la pregunta anterior.

Según lo declarado por Martin —

Pyperclip es definitivamente una buena opción y funciona como un encanto.

No sé por qué no deberías usarlo.

Es tan simple como 3 líneas abajo,

 import pyperclip pyperclip.copy('The text to be copied to the clipboard.') paste= pyperclip.paste()