WorldViz User Forum

WorldViz User Forum (https://forum.worldviz.com/index.php)
-   Vizard (https://forum.worldviz.com/forumdisplay.php?f=17)
-   -   Vizard tech tip: Using the Python Imaging Library (PIL) (https://forum.worldviz.com/showthread.php?t=1929)

Jeff 03-23-2009 11:13 AM

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 viz
import 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 viz
import 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))



All times are GMT -7. The time now is 01:14 AM.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Copyright 2002-2023 WorldViz LLC