[Tutor] More image manipulation
D. Hartley
denise.hartley at gmail.com
Tue Jun 7 21:05:47 CEST 2005
Hello, everyone!
If someone has a few seconds, I am getting some weird errors and
Python won't tell me why. What I am trying to do is take a middle
chunk out of a line of an image, place that at the beginning of the
line, and slide the rest over to the end, like so:
aaaaaaaa111bbbbbb
to:
111aaaaaaabbbbbb
etc.
I'm doing this for each horizontal line in a 640x480 picture, and then
I want to take all those newlines and make a new image. So I made a
list of all the pixel values (this is the one whose mode is "P," that
strange thing I emailed about before, so instead of a tuple of RGB
values, it just gives me one number for each pixel). To create this
list, I did:
This is what I did:
def findlist():
newlist = []
for i in range(480):
line = fromlist[:640]
del fromlist[:640]
x = line.index(195)
y = x + 5
z = line[x:y]
del line[x:y]
for i in z:
newlist.append(i)
for i in line:
newlist.append(i)
return newlist
So this worked exactly as I figured it would. It returned me a list,
len 307200 (hooray!), and I looked at the first handful of 640-long
chunks and indeed, each now starts with five 195's (the middle chunk I
am removing from each line and re-placing at the beginning of each new
line).
So now I have a list 307200 pixels long of pixel values, and I want to
put it into a new image. I then did the following:
def makenewpic():
newim = Image.new("P",(640,480))
a = findlist()
result = newim.putdata(a)
return result
Now two weird things happen.
A). If I try to run b = makenewpic() (so that i'd have a b i could do
b.show() on), I get this error:
Traceback (most recent call last):
File "<pyshell#53>", line 1, in ?
b = makenewpic()
File "Z:\misc\16.py", line 50, in makenewpic
a = findlist()
File "Z:\misc\16.py", line 37, in findlist
x = line.index(195)
ValueError: list.index(x): x not in list
This is annoying enough in and of itself, besides, I am about 99% sure
that there IS a set of five 195's on every single line, and the error
does not seem to be valid *because*:
B). If I run the steps in makenewpic one by one in the interpreter, it
doesnt give me any "x not in list" error, it lets me do the result =
newim.putdata(a) just fine. But then when I type result.show() it
tells me 'NoneType' object has no attribute 'show'. At first I
thought it was because when I was creating the blank newim, I was
using mode "RGB" and adding a list of "P" pixel values to it. But I
fixed it so that my newim is also mode "P" and it still tells me that
type(result) = None.
Again, this is probably some little typo or dumb newbie error that I'm
missing because of looking at this thing four million times and
getting frustrated. I'm hoping a fresh set of eyes will help?
Thank you guys for your patience!
~Denise
More information about the Tutor
mailing list