[IMAGE-SIG] [FYI & Q] Problems installing PIL and spectrogram

Harald Singer singer@itl.atr.co.jp
Tue, 10 Mar 1998 16:19:57 +0900


Hi,

Some minor (and major) problems when installing PIL with
	PIL0.3a3, Python1.5, Linux2.0.32, Tk8.0p2 (+Japanese Patch 3)

[1] spell miss?

Lib/Image.py:
from Types import IntType, StringType, TupleType

Shouldn't this be types? I couldn't find any Types.py in Python1.5.

[2] 

   Then type (assuming a standard shell):

	$ cd test
	$ PYTHONPATH=..:../Lib ; export PYTHONPATH
	$ python

	>>> import _imaging
	>>> import Image

I couldn't find any test directory. I then did
	mkdir test; cd test
	etc

cp _imagingmodule.so /usr/local/lib/python1.5/site-packages
cp -r Imaging/Lib /usr/local/lib/python1.5/Imaging
export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python1.5/Imaging

It seemed to work (don't know what I should expect, though).

[3]
I then followed the instructions to recompile tkinter
but

gcc -g -O2 -I./../Include -I.. -DHAVE_CONFIG_H  -DWITH_APPINIT -I/usr/local/include -c ./tkImaging.c
./tkImaging.c:44: Imaging.h: No such file or directory

I then looked at the Modules/Setup file more closely. It is already prepared for PIL!
I uncommented the PIL line in Modules/Setup and 
	mv ../Extensions/Imaging-0.3a3 ../Extensions/Imaging
However, then I get

gcc -g -O2 -I./../Include -I.. -DHAVE_CONFIG_H  -DWITH_APPINIT -I/usr/local/include -DWITH_PIL -I../Extensions/Imaging/libImaging -c ./tkImaging.c
./tkImaging.c: In function `PyImagingPhoto':
./tkImaging.c:76: warning: passing arg 1 of `Tk_FindPhoto' from incompatible pointer type
./tkImaging.c:76: too few arguments to function `Tk_FindPhoto'
make: *** [tkImaging.o] Error 1

Looking at /usr/local/lib/tk.h

#define TK_MAJOR_VERSION   8
#define TK_MINOR_VERSION   0
#define TK_RELEASE_LEVEL   2
#define TK_RELEASE_SERIAL  2

#define TK_VERSION "8.0"
#define TK_PATCH_LEVEL "8.0p2"

...

EXTERN Tk_PhotoHandle	Tk_FindPhoto _ANSI_ARGS_((Tcl_Interp *interp,
			    char *imageName));
...

I then changed in tkImaging.c
    photo = Tk_FindPhoto(argv[1]);
to
    photo = Tk_FindPhoto(interp,argv[1]);

and it compiled/linked! The following also worked

bash$ cd Extension/Imaging/Scripts
bash$ python1.5 viewer.py ../Images/lena.jpg

worked.


[4] now my major problem: I am trying to plot a spectrogram
and I get this error:

  File "specgram.py", line 300, in __init__
    photo = ImageTk.PhotoImage(image)
  File "/usr/local/lib/python1.5/Imaging/ImageTk.py", line 65, in __init__
    mode = image.palette.mode
AttributeError: attribute-less object

	if hasattr(image, "mode") and hasattr(image, "size"):
	    # got an image instead of a mode
	    mode = image.mode
            if mode == "P":
                # palette mapped data
                image.load()
==>             mode = image.palette.mode
	    size = image.size
	    kw["width"], kw["height"] = size
	else:
            mode = image
	    image = None

If I change the offending line to
		mode = 'RGB'

it somehow works, at least this works
	photo = ImageTk.PhotoImage(image)
	Tkinter.Button(self,image=photo,
		       command=self.quit).pack()

but this just shows a blank buttong
	Tkinter.Button(self,image=ImageTk.PhotoImage(image),
		       command=self.quit).pack()

BTW, to create this image I did something like 

    # create a PIL image of palette type
    image = Image.new("P",(fftorder/2,yyy.shape[0]))
    image.im.putpalette("RGB", Colormap2Palette())
    image.fromstring(yyy.tostring())

(if it is of interest I can post the complete source code for creating
 a colorful spectrogram, but I would rather find a fix before doing that)
-- 
Harald Singer, ATR ITL, tel +81-7749-5-1389   singer@itl.atr.co.jp




_______________
IMAGE-SIG - SIG on Image Processing with Python

send messages to: image-sig@python.org
administrivia to: image-sig-request@python.org
_______________