Foros Python

Versión completa: PIL problema pasar variable en vez de Arhivo
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Hola, Buenas tardes, primero decir que soy nuevo en el lenguaje de python y el motivo de este post es para una duda que tengo con respecto a una librería de python que es PIL / PILLOW. La situación es la siguiente: Quiero hacer una programa que saque una captura del escritorio de una zona determinada cada cierto tiempo y despues  poder usarla en PIL para aplicar unos filtros, pero cuando aplico el comando Imagen.Open("aqui es donde quiero poner la variable") me sale error, ya que solo permite la dirección de un archivo y me gustaría saber de alguien mas experimentado si me podría aclarar la duda de si ese es el comando adecuado, o hay otra forma de cargar directamente la variable, sin necesidad de pasarla por archivo.

Trabajo en windows 10, python 2.7 y mi IDE es Pycharm


Código:
import autopy
import pyscreenshot         #He intentado con pyscreenshot para sacar la captura, pero se me cuelva el código
from PIL import Image


def capturas():

   rect = ((364, 642), (40, 40))

   Foto = autopy.bitmap.capture_screen(rect)   #uso el paquete autopy para sacar una captura de pantalla de
                                               #una zona determinada

   Foto2 = Image.open(Foto)            #quiero usar la variable donde se guardo la captura y abrirla
                                       #con PIL es donde tengo el problema
   img = Foto2.Image.convert('L')      #aplico el filtro de grises a la imagen abierta con PIL
   img.show()                          #Muestro la imagen con el filtro aplicado


capturas()


PD: he intentado sacar la captura con otro paquete llamado pyscreenshot, pero he tenido algunos problemas, ya que se me queda colgado el programa, pero bueno eso es otro asunto.

Un saludo y muchas gracias por vuestra atención.
Hola, ¿cómo estás? El problema es que AutoPy no usa Pillow ni tampoco provee ningún método para convertir desde su clase Bitmap. Por el momento la única solución viable que veo es guardar la captura en un archivo y luego cargarla usando Image.open().

  1. screenshot = autopy.bitmap.capture_screen(rect)
  2. screenshot.save("screenshot.png")
  3. img = Image.open("screenshot.png")


Como alternativa podés usar PyAutoGUI (como explico en este artículo) que directamente retorna una instancia de PIL.Image.

Un saludo.

P.D.: Gracias por el dato de pyscreenshot, voy a chequearlo para agregarlo al artículo!
Hola Francisco, gracias por tu respuesta. He estado probando el paquete de PyAutoGUi y efectivamente he tenido mejores resultados que el otro paquete. Muchas gracias.