Dynamic generation of images (was Re: Custom Classes?)
J. Cliff Dyer
jcd at sdf.lonestar.org
Fri May 9 10:02:49 EDT 2008
On Thu, 2008-05-08 at 10:33 -0500, Victor Subervi wrote:
> Okay, trying this again with everything working and no ValueError or
> any other errors, here we go:
>
> Load this code. Unless you use a similar login() script, you will want
> to edit your own values into the user, passwd, db and host:
>
> #!/usr/bin/python
>
> import MySQLdb
>
> import sys,os
> sys.path.append(os.getcwd())
> from login import login
> user, passwd, db, host = login()
>
> pic = "pic1"
> w = 20
> x = 0
> d = 6
> y = 1
>
> getpic = "getpic" + str(w) + ".py"
> try:
> os.remove(getpic)
> except:
> pass
> code = """
> #!/usr/local/bin/python
> import cgitb; cgitb.enable()
> import MySQLdb
> import cgi
> import sys,os
> sys.path.append(os.getcwd())
> from login import login
> user, passwd, db, host = login()
> form = cgi.FieldStorage()
> picid = int(form["id"].value)
> x = int(form["x"].value)
> pics =
> {1:'pic1',2:'pic1_thumb',3:'pic2',4:'pic2_thumb',5:'pic3',6:'pic3_thumb',7:'pic4',8:'pic4_thumb',\
> 9:'pic5',10:'pic5_thumb',11:'pic6',12:'pic6_thumb'}
> pic = pics[x]
> db = MySQLdb.connect(host, user, passwd, db)
> cursor= db.cursor()
> sql = "select %s from products where id='%s';" % (pic, str(picid))
>
> cursor.execute(sql)
> content = cursor.fetchall()[0][0].tostring()
> cursor.close()
> print 'Content-Type: image/jpeg'
> print
> print content
> """
> script = open(getpic, "w")
> script.write(code)
> script.close()
>
>
>
> and then surf to:
> http://whatever.url/getpic20.py?id=6&x=1
>
>
> Also, please re-send the link on how to post good questions to the
> list. I cannot find it.
> TIA,
> Victor
Why are you dynamically creating getpic20.py?
Obviously, in the real script, you probably have several of them:
getpic1.py, getpic2.py, etc., but is there any reason you couldn't just
have one getpic.py, and pass the number in as a parameter in your GET
request, like this:
http://localhost/getpic.py?id=6&x=1&w=20
Then you can just have a static getpic.py. I've stripped out useless
bits:
* You don't use sys or os, so why import them?
* MySQL makes it difficult for me to replicate your behavior, because I
don't have your DB setup. The DB call has been replaced with a
dictionary of keys into JPG data, pulled from the filesystem. Change
filenames to jpegs on your own hard drive
* login is useless without MySQL.
So your new getpic.py (statically created) looks like this:
~~~ getpic.py ~~~
#!/usr/local/bin/python
import cgitb; cgitb.enable()
import cgi
pics = {
1: open('pic.jpg').read(),
2: open('pic2.jpg').read()
}
# you could just pass the filename, and then you wouldn't have to load
the
# image data in advance, but this more closely mimics the concept of
your DB
# setup.
form = cgi.FieldStorage()
x = int(form["x"].value)
pic = pics[x]
print 'Content-Type: image/jpeg'
print
print pic
~~~
Then if you want to include your pictures in a web page, you do
~~~ show_pics.html ~~~
<html>
<head><title>Pictures</title></head>
<body>
<h1>pictures</h1>
<img src='http://example.com/getpic.py?x=1'/>
<img src='http://example.com/getpic.py?x=2'/>
</body>
</html>
~~~
This should work just as well when you refactor the script to pull from
the database.
Hope this helps. Also, the article on asking good questions is
available here: http://catb.org/~esr/faqs/smart-questions.html
More information about the Python-list
mailing list