| 
 Vizard tech tip: Using the Python Imaging Library (PIL)
 Use the Python Imaging Library (PIL)  to add image processing capabilities to your Vizard script.  You can process an image and then load it as a texture within Vizard.  Cutting, pasting, and merging images, rotating and resizing images, and image enhancement are some examples of what you can do.  Setting up and using this 3rd party library is easy.  Follow the instructions in this article and then check out the example scripts provided.
Installation 
Go to the Pythonware  site to download the installer.
 
Download the PIL version of the installer for the version of Python used by Vizard.  Use the table below to determine which version of Python your Vizard installation uses:
 
Vizard 2.x uses Python 2.3 
Vizard 3.x uses Python 2.4
 
Run the installer. It should automatically detect Vizard's Python installation. If you have multiple Python installations on your computer, make sure you select the Vizard Python installation.
 
You should now be able to use PIL within your Vizard script. Browse through the documentation  and examples to learn how to use the module.
 
This first script shows the basics for taking a PIL image and coping it to a Vizard texture.   Use the function shown here to apply your own processed images as textures within Vizard.
 
	Code: 
 import vizimport Image
 viz.go()
 
 def PIL_TO_VIZARD(image,texture):
 """Copy the PIL image to the Vizard texture"""
 im = image.transpose(Image.FLIP_TOP_BOTTOM)
 texture.setImageData(im.convert('RGB').tostring(),im.size)
 
 #Create a blank Vizard texture
 tex = viz.addBlankTexture([1,1])
 
 #Apply texture to quad
 quad = viz.addTexQuad(pos=(0,1.8,2),texture=tex)
 
 #Create a PIL image.  If the image is in the current script directory
 #you don't need to specify the path
 image = Image.open( viz.res.getFullPath('lake3.jpg') )
 
 #Copy PIL image to Vizard texture
 PIL_TO_VIZARD(image,tex)
 In the following example we open up a PIL image, process it with the image.crop method and then copy the resulting images to Vizard textures with the PIL_TO_VIZARD function.  Then we animate the quads those textures are applied to.
 
	Code: 
 import vizimport Image
 viz.go()
 
 import vizinfo
 info = vizinfo.add('This script demonstrates the use of the Python Imaging Library(PIL) within Vizard')
 
 def PIL_TO_VIZARD(image,texture):
 """Copy the PIL image to the Vizard texture"""
 im = image.transpose(Image.FLIP_TOP_BOTTOM)
 texture.setImageData(im.convert('RGB').tostring(),im.size)
 
 #Create 4 blank Vizard texture
 tex1 = viz.addBlankTexture([1,1])
 tex2 = viz.addBlankTexture([1,1])
 tex3 = viz.addBlankTexture([1,1])
 tex4 = viz.addBlankTexture([1,1])
 
 #Apply textures to 4 quads
 quad1 = viz.addTexQuad(pos=(-.5,2.5,8),texture=tex1)
 quad2 = viz.addTexQuad(pos=(.5,2.5,8),texture=tex2)
 quad3 = viz.addTexQuad(pos=(-.5,1.5,8),texture=tex3)
 quad4 = viz.addTexQuad(pos=(.5,1.5,8),texture=tex4)
 
 #Create a PIL image.  If the image is in the current script directory
 #you don't need to specify the path
 image = Image.open( viz.res.getFullPath('lake3.jpg') )
 
 #Break up the image into 4 regions using the image.crop method
 WIDTH = image.size[0]
 HEIGHT = image.size[1]
 HALF_WIDTH = int(round(image.size[0] / 2.0))
 HALF_HEIGHT = int(round(image.size[1] / 2.0))
 
 box1 = (0,0,HALF_WIDTH,HALF_HEIGHT)
 region1 = image.crop(box1)
 box2 = (HALF_WIDTH,0,WIDTH,HALF_HEIGHT)
 region2 = image.crop(box2)
 box3 = (0,HALF_HEIGHT,HALF_WIDTH,HEIGHT)
 region3 = image.crop(box3)
 box4 = (HALF_WIDTH,HALF_HEIGHT,WIDTH,HEIGHT)
 region4 = image.crop(box4)
 
 #Copy PIL images to Vizard textures
 PIL_TO_VIZARD(region1,tex1)
 PIL_TO_VIZARD(region2,tex2)
 PIL_TO_VIZARD(region3,tex3)
 PIL_TO_VIZARD(region4,tex4)
 
 #Animate our texture quads
 wait = vizact.waittime(1)
 
 move1_out = vizact.move([-.5,.5,0], 1)
 move1_in = vizact.move([.5,-.5,-0], 1)
 quad1.addAction(vizact.sequence([move1_out,move1_in, wait], viz.FOREVER))
 
 move2_out = vizact.move([.5,.5,0], 1)
 move2_in = vizact.move([-.5,-.5,-0], 1)
 quad2.addAction(vizact.sequence([move2_out,move2_in, wait], viz.FOREVER))
 
 move3_out = vizact.move([-.5,-.5,0], 1)
 move3_in = vizact.move([.5,.5,-0], 1)
 quad3.addAction(vizact.sequence([move3_out,move3_in, wait], viz.FOREVER))
 
 move4_out = vizact.move([.5,-.5,0], 1)
 move4_in = vizact.move([-.5,.5,-0], 1)
 quad4.addAction(vizact.sequence([move4_out,move4_in, wait], viz.FOREVER))
 |