image resize doesn't work
Chris Hare
chare at labr.net
Sun Aug 1 15:08:44 EDT 2010
On Aug 1, 2010, at 1:08 PM, Peter Otten wrote:
> Chris Hare wrote:
>
>
>> On Aug 1, 2010, at 10:24 AM, rantingrick wrote:
>>
>>> On Aug 1, 7:35 am, Chris Hare <ch... at labr.net> wrote:
>>>> I have the following chunk of code. Although it seems to execute fine,
>>>> no errors
>>>
>>> Not True! it contains syntax errors. Check the posted code and next
>>> time post all the code.
>>> --
>>> http://mail.python.org/mailman/listinfo/python-list
>>
>> Hmmm... ok
>> here is the code. I get no errors on my console when it execute
>>
>> urllib.urlretrieve(findu, "image.png")
>
> I get a NameError on the very first line.
>
>>>> urllib.urlretrieve(findu, "image.png")
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> NameError: name 'urllib' is not defined
>
> When you want to demonstrate a problem try to make a self-contained example,
> i. e. one that can be run without the need for us guess the surrounding
> code. Remove everything that is irrelevant for the problem like the logging
> in code below and the png/gif conversion gymnastics.
>
> Anyway, here is a self-contained demo (you have to pass the filename of an
> image on the commandline):
>
> import Tkinter
> import ImageTk
> import Image
> import sys
>
> [filename] = sys.argv[1:]
>
> image = Image.open(filename)
>
> root = Tkinter.Tk()
> frame = Tkinter.Frame(root)
> frame.pack()
> label = Tkinter.Label(root)
> label.pack()
>
> def make_resize(percent):
> def resize():
> width, height = image.size
> label.image = label["image"] = ImageTk.PhotoImage(
> image=image.resize((width*percent//100, height*percent//100)))
> return resize
>
> make_resize(100)()
>
> pairs = [
> ("Small", 20),
> ("Medium", 50),
> ("Original", 100),
> ("Big", 200)]
>
> for i, (text, percent) in enumerate(pairs):
> button = Tkinter.Button(frame, text=text, command=make_resize(percent))
> button.grid(row=0, column=i)
>
> root.mainloop()
>
> Peter
> --
> http://mail.python.org/mailman/listinfo/python-list
Thanks for the help. My one week of python is getting a workout.
I have shortened it all down and made it a standalone example, using yours as a model. Your example, works, but it will take a lot of effort to retrofit it into the code I have. (which is maybe not a bad idea,).
Anyway
from Tkinter import *
import ImageTk
import Image
import sys
def sizeit(filename):
image = Image.open(filename)
w,h = image.size
print w, h
photo = ImageTk.PhotoImage(file=filename)
canvasWidth = 450
canvasHeight = 412
image = image.resize((canvasWidth,canvasHeight),Image.ANTIALIAS)
w,h = image.size
print w, h
netRadarImage = Label(frame, image=image)
netRadarImage.image = photo
w.grid(row=1, column=0, columnspan=3)
netRadarImage.grid( row=1, column=0)
[filename] = sys.argv[1:]
root = Tk()
frame = Frame(root)
frame.grid()
sizeit(filename)
root.mainloop()
Just like yours it takes a filename. Unlike yours, mine gets an error that I can't figure out and is likely the root of the problem.
When I run this code I get
600 550 <== ORIGINAL image size
450 412 <== resized image size
Traceback (most recent call last):
File "zztest.py", line 26, in <module>
sizeit(filename)
File "zztest.py", line 16, in sizeit
netRadarImage = Label(frame, image=image)
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-tk/Tkinter.py", line 2466, in __init__
Widget.__init__(self, master, 'label', cnf, kw)
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-tk/Tkinter.py", line 1932, in __init__
(widgetName, self._w) + extra + self._options(cnf))
_tkinter.TclError: image "<Image.Image image mode=P size=450x412 at 0x1016095A8>" doesn't exist
So, my problem appeared to be the resize, but in fact is just getting it onto the label.
What am I doing wrong?
More information about the Python-list
mailing list