You are not logged in.
Pages: 1
I'm running x_64 arch up to date. I wanted to test a program that runs on our ubuntu servers and also win32 etc etc. From the following script I seem to see that the pacman version of PIL is giving different results from elsewhere
import os
import Image
_7x7cdef=[(0, 0, 2), (0, 1, 2), (0, 2, 2), (0, 3, 2), (0, 4, 2),
(0, 5, 2), (0, 6, 0), (1, 0, 2), (1, 1, 2), (1, 2, 2),
(1, 3, 2), (1, 4, 0), (1, 5, 0), (1, 6, 0), (2, 0, 2),
(2, 1, 2), (2, 2, 2), (2, 3, 0), (2, 4, 0), (2, 5, 0),
(2, 6, 0), (3, 0, 2), (3, 1, 2), (3, 2, 0), (3, 3, 0),
(3, 4, 0), (3, 5, 1), (3, 6, 1), (4, 0, 2), (4, 1, 0),
(4, 2, 0), (4, 3, 0), (4, 4, 1), (4, 5, 1), (4, 6, 1),
(5, 0, 2), (5, 1, 0), (5, 2, 0), (5, 3, 1), (5, 4, 1),
(5, 5, 1), (5, 6, 1), (6, 0, 0), (6, 1, 0), (6, 2, 0),
(6, 3, 1), (6, 4, 1), (6, 5, 1), (6, 6, 1)]
def save_corner(fnRoot,fg=(255,255,255),bfg=(229,229,229),cn='tl'):
dn = os.path.dirname(fnRoot)
if not dn: dn = os.getcwd()
fn = os.path.join(dn,'%02x%02x%02x%02x%02x%02x_%s.gif' % (fg+bfg+(cn,)))
if os.path.isfile(fn): return
bg = (fg[0]!=255 and 255 or 254,255,255)
im = Image.new('RGB',(7,7),bg)
C = {2:bg,0:bfg,1:fg}
for i,j,c in _7x7cdef:
if cn=='tr':
i = 6-i
elif cn=='bl':
j = 6-j
elif cn=='br':
i = 6-i
j = 6-j
elif cn!='tl':
raise ValueError('Unknown corner name %r'%cn)
im.putpixel((i,j),C[c])
im.save(fn.replace('.gif','-orig.gif'))
imo = im.convert('P',dither=Image.NONE,palette=Image.ADAPTIVE,colors=3)
palette = imo.getpalette()
transparency = None
for i in xrange(0,3*3,3):
print i,tuple(palette[i:i+3]),bg
if tuple(palette[i:i+3])==bg:
transparency = i / 3
break
imo.save(fn,transparency=transparency)
if __name__=='__main__':
save_corner('output/xxx')
when I run the above with the builtin python2(python2 2.7.3-4) I see the following
robin@bunyip ~/code/tpil/charts:
$ python2 tpil.py
0 (0, 0, 0) (254, 255, 255)
3 (0, 0, 0) (254, 255, 255)
6 (0, 0, 0) (254, 255, 255)
Traceback (most recent call last):
File "tpil.py", line 45, in <module>
save_corner('output/xxx')
File "tpil.py", line 42, in save_corner
imo.save(fn,transparency=transparency)
File "/usr/lib/python2.7/site-packages/PIL/Image.py", line 1439, in save
save_handler(self, fp, filename)
File "/usr/lib/python2.7/site-packages/PIL/GifImagePlugin.py", line 281, in _save
+ chr(0))
TypeError: int() argument must be a string or a number, not 'NoneType'
on the other platforms we typically build our own python environment so I tried that on my arch system using the standard configure make dance for python (python2 2.7.3-4) & PIL (Imaging-1.1.7.tar.gz) with --prefix=$HOME/LOCAL. When I run this self built python27 I see the following
$ python27 tpil.py
0 (255, 255, 255) (254, 255, 255)
3 (254, 255, 255) (254, 255, 255)
it seems the self built python2.7.3+pil 1.1.7 is behaving as I expect (ie we do detect the transparent colour index in the PALETTE image imo). From the output images & the print statements I deduce that the difference/failure is in the statement
[bold]imo = im.convert('P',dither=Image.NONE,palette=Image.ADAPTIVE,colors=3)[/bold]
so what am I doing wrong? Or is this an issue with the distributed python2-imaging?
Incidentally the above code is used to generate some image corners for dynamically generated html content.
Offline
Pages: 1