Convertir cadena a imagen en python

Comencé a aprender Python hace una semana y quiero escribir un pequeño progtwig que convierte un correo electrónico en una imagen (.png) para que pueda compartirse en foros sin correr el riesgo de recibir muchos correos electrónicos no deseados.

Parece que la biblioteca estándar de python no contiene un módulo que pueda hacer eso, pero he descubierto que hay un módulo PIL para él (PIL.ImageDraw).

Mi problema es que parece que no puedo hacerlo funcionar.

Así que básicamente mis preguntas son:

  1. Cómo dibujar un texto sobre una imagen.
  2. Cómo crear una imagen en blanco (blanco)
  3. ¿Hay alguna forma de hacerlo sin crear un archivo para que pueda mostrarlo en una GUI antes de guardarlo?

Gracias por tu ayuda 🙂

Código actual:

import Image import ImageDraw import ImageFont def getSize(txt, font): testImg = Image.new('RGB', (1, 1)) testDraw = ImageDraw.Draw(testImg) return testDraw.textsize(txt, font) if __name__ == '__main__': fontname = "Arial.ttf" fontsize = 11 text = "example@gmail.com" colorText = "black" colorOutline = "red" colorBackground = "white" font = ImageFont.truetype(fontname, fontsize) width, height = getSize(text, font) img = Image.new('RGB', (width+4, height+4), colorBackground) d = ImageDraw.Draw(img) d.text((2, height/2), text, fill=colorText, font=font) d.rectangle((0, 0, width+3, height+3), outline=colorOutline) img.save("D:/image.png") 

  1. use ImageDraw.text , pero no realiza ningún formateo, solo imprime la cadena en la ubicación dada

     img = Image.new('RGB', (200, 100)) d = ImageDraw.Draw(img) d.text((20, 20), 'Hello', fill=(255, 0, 0)) 

    para averiguar el tamaño del texto:

     text_width, text_height = d.textsize('Hello') 
  2. Al crear una imagen, agregue un argumento adicional con el color requerido (blanco):

     img = Image.new('RGB', (200, 100), (255, 255, 255)) 
  3. hasta que guarde la imagen con el método Image.save , no habrá ningún archivo. Entonces, solo es cuestión de una transformación adecuada colocarlo en el formato de su GUI para su visualización. Esto se puede hacer codificando la imagen en un archivo de imagen en memoria:

     import cStringIO s = cStringIO.StringIO() img.save(s, 'png') in_memory_file = s.getvalue() 

    Esto puede ser enviado a GUI. O puede enviar datos de bitmap en bruto directo:

     raw_img_data = img.tostring()