Graficos web
Juan M. Puertas
juatman_2000 en yahoo.es
Jue Ene 12 23:18:05 CET 2006
Hola amigos:
> Las bibliotecas wxPython son para programas con ventanas (GUI) no para
> CGIs
Esto es muy aclarador, gracias Víctor. También muy aclarador tu mensaje,
Mauricio.
Gracias a Alberto, ¡que buena comunidad ésta! :-)
Ya he instalado PIL y todo funciona a la perfección, podeis ver el código
fuente más abajo, para quien necesite alguna vez hacer algo parecido.
El gráfico se guarda para ser presentado posteriormente por la página
web (esto último no funciona, creo que es un bug de TurboGears, el
framework-web para python que he elegido para hacer pruebas).
Si con TurboGears devuelves desde el programa en python lo siguiente:
_______________________________________________________
return '''<img src="sobre.png">'''
_______________________________________________________
Cherrypy (componente de TurboGears y de Subway) muestra el mensaje de
error "path not found".
TurboGears genera controllers.py en la carpeta raíz del servidor, lo que
veis a continuación es éste programa con las modificaciones para que dibuje
un par de líneas cruzadas (como un sobre) y las guarde:
Saludos :-)
_______________________________________________________
import turbogears
import cherrypy
import Image, ImageDraw
from turbogears import controllers
class Root(controllers.Root):
@turbogears.expose(html="gs.templates.welcome")
def index(self):
# import time
# return dict(now=time.ctime())
# Lo siguiente es un formulario HTML que me ha servido para hacer
pruebas con TurboGerars:
return '''
<form action="greetUser" method="POST"
enctype="multipart/form-data">
What is your name?
<input type="text" name="name" />
<input type="text" name="pame" />
<input type="submit" />
</form>'''
index.exposed = True
def greetUser(self, name = None, pame = None):
# CherryPy passes all GET and POST variables as method parameters.
# It doesn't make a difference where the variables come from, how
# large their contents are, and so on.
#
# You can define default parameter values as usual. In this
# example, the "name" parameter defaults to None so we can check
# if a name was actually specified.
if name: # Obliga a que escribas al menos el nombre en el
formulario (sólo para probar)
im = Image.open("blanco.jpg")
draw = ImageDraw.Draw(im)
draw.line((0, 0) + im.size, fill=128)
draw.line((0, im.size[1], im.size[0], 0), fill=128)
del draw
# graba en otro formato
im.save("sobre.png", "PNG")
#Lo siguiente genera la página web resultante
return '''<img src="sobre.png">''' # No funciona, pero la
imagen se guarda correctamnente.
# Greet the user!
#return "Hey %s, what's up?" % (name + ' ' + pame + ' ' + s)
else:
if pame is None:
# No name was specified
return 'Please enter your name <a href="./">here</a>.'
else:
return 'No, really, enter your name <a href="./">here</a>.'
greetUser.exposed = True
cherrypy.root = Root()
______________________________________________
LLama Gratis a cualquier PC del Mundo.
Llamadas a fijos y móviles desde 1 céntimo por minuto.
http://es.voice.yahoo.com
Más información sobre la lista de distribución Python-es