Stilfrage
Ich würde optparse vorziehen. Es sei denn Du willst lernen, wie man so etwas im "C-Stil" programmiert. Ausser das optparse "objektorientierter" und damit IMHO auch lesbarer ist als getopt, kann man auch automatisch eine Hilfe mit -h bzw. --help aus den Optionen generieren lassen.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Jup. Bis auch Rückwährtskompatibilität gibt es keinen Grund getopt zu verwenden. Und wenn du es mal wirklich für Python 2.2 brauchst - Optik ist das gleiche und geht ab py 2.2
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Ganz ruhig Jungs!
Ich probiere mich gerade an optparse.
habe dazu schon ein wenig Code vom gerold[1] stiebitzt.
cu Sebastian
[1] http://python.sandtner.org/viewtopic.php?t=1811
Ich probiere mich gerade an optparse.
habe dazu schon ein wenig Code vom gerold[1] stiebitzt.
cu Sebastian
[1] http://python.sandtner.org/viewtopic.php?t=1811
Ich habe das Gefühl, optparse ist etwas zu hoch für mich.
Ich habe wie gesagt beim gerold abgeschaut und die Doku zu optparse/optik durchgearbeitet.
@Leonidas: dein Prog habe ich mir auch ageschaut, aber leider nicht genug verstanden um es bei mir anwenden zu können.
Unten habe ich mal den Code gepostet, wie weit ich gekommen bin.
Leider gibt es eine Fehlemeldung:
Ich möchte erst einmal als Parameter nur thumb_height und den usage-Text haben.
Also wie greife ich auf den Parameter thumb_height zu (versucht habe ich es bei [1] und [2]).
Ich möchte in main() wenn ein Parameter übergeben wurde every_image_in_folder() mit diesem aufrufen ansonsten soll der default Wert benutzt werden.
Bis denn Sebastian
Ich habe wie gesagt beim gerold abgeschaut und die Doku zu optparse/optik durchgearbeitet.
@Leonidas: dein Prog habe ich mir auch ageschaut, aber leider nicht genug verstanden um es bei mir anwenden zu können.
Unten habe ich mal den Code gepostet, wie weit ich gekommen bin.
Leider gibt es eine Fehlemeldung:
Code: Alles auswählen
>python -u tk-images2thumbs0-0-4.py
File "tk-images2thumbs0-0-4.py", line 36
print "options: " options.thumb_height
^
SyntaxError: invalid syntax
Also wie greife ich auf den Parameter thumb_height zu (versucht habe ich es bei [1] und [2]).
Ich möchte in main() wenn ein Parameter übergeben wurde every_image_in_folder() mit diesem aufrufen ansonsten soll der default Wert benutzt werden.
Bis denn Sebastian
Code: Alles auswählen
#!/usr/bin/python
# -*- encoding: latin-1 -*-
import sys, os, Image, optparse
__VERSION__ = "0.0.3"
def parse_options():
"""
parses and returns commandline options
"""
#Usage-Text angeben und Parser-Objekt erzeugen
usage = "\n %prog [thumb_height] \n\n" + \
" generates a thumbnail for every pic in a folder \n" + \
" by Sebastian Koch 2004 "
version = "%prog " + __VERSION__
parser = OptionParser(usage = usage, version = version)
parser.add_option("-y", "--thumb_height",
action="store", type="int", dest="thumb_height", default = 100,
help = "(in pixel) used to calculate thumb_width by aspectratio of inputpic --> default = 100" )
#parse options
(options, args) = parser.parse_args()
# shows help if there are no arguments
if len(args) == 0:
parser.print_help()
# sys.exit(0) # stop the programm.
#just for testing ------------------------------------------- [1]
else:
print "options: " options.thumb_height
return (options, args)
def create_thumb(file_full_path, thumb_height):
""" creates a thumb of a pic by a given height with original aspectratio
Paramters:
file_full_path = path/to/file.ext
thumb_height = (in pixel) used to calculate thumb_width by aspectratio of inputpic
"""
no_extension = os.path.splitext(file_full_path)[0]
im = Image.open(file_full_path)
original_width, original_height = im.size
thumb_width = thumb_height * original_width / original_height
im.thumbnail((thumb_width, thumb_height), Image.ANTIALIAS)
im.save(no_extension + "-thumb.jpg", "JPEG")
print "Thumb created:"
print "--> " + no_extension+ "-thumb.jpg"
def every_image_in_folder(input_folder, thumb_height):
""" walks through a given folder and calls create_thumb() for every image
Paramters:
inputfolder = folder with original pics
thumb_height = used to call create_thumb()
"""
for this_file in os.listdir(input_folder):
create_thumb(os.path.join(input_folder, this_file), thumb_height)
def main():
#Optionen und Argumente parsen
#(options, args) = parse_options()
#print "options-in-main: " options.thumb_height #------------------------------------------- [2]
pic_search_path = "/home/sabba/in/pic/"
every_image_in_folder(pic_search_path, thumb_height=100)
if __name__ == '__main__':
main()
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Hi Mr_Snede,
hast dir wohl die Zeile 36 nicht genau angeschaut?
Da fehlt einfach ein "," zwischen "options: " und options.thumb_height.
Gruß
Dookie
hast dir wohl die Zeile 36 nicht genau angeschaut?
Da fehlt einfach ein "," zwischen "options: " und options.thumb_height.
Gruß
Dookie
[code]#!/usr/bin/env python
import this[/code]
import this[/code]
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Und wenn OptionParser aus dem richtigen Namensraum kommt, geht es sogar einwandfrei:
Btw: __version__ sollte klein sein, denn Python macht einen Unterschied bei sowas, und die meisten Programmierer nutzen __version__.
Code: Alles auswählen
def parse_options():
"""parses and returns commandline options"""
#Usage-Text angeben und Parser-Objekt erzeugen
usage = "\n %prog [thumb_height] \n\n" + \
" generates a thumbnail for every pic in a folder \n" + \
" by Sebastian Koch 2004 "
version = "%prog " + __VERSION__
parser = optparse.OptionParser(usage = usage, version = version)
parser.add_option("-y", "--thumb_height",
action="store", type="int", dest="thumb_height", default = 100,
help = "(in pixel) used to calculate thumb_width by aspectratio of inputpic --> default = 100" )
#parse options
(options, args) = parser.parse_args()
# shows help if there are no arguments
if len(args) == 0:
parser.print_help()
# sys.exit(0) # stop the programm.
#just for testing ------------------------------------------- [1]
else:
print "options: ", options.thumb_height
return (options, args)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
@ Dookie:
Wie dumm von mir, solch einen Fehler hätte ich eigentlich selbst finden müssen. Aber ich habe wohl zu lange vorm Rechner gesessen. Dank dir.
@ Leonidas:
__version__ hatte ich groß geschrieben, weil es während der Laufzeit nicht verändert wird also statisch ist.
Hier im Forum hat jemand gesagt er würde statische Variablen groß schreiben, das finde ich sinnig also habe ich sie groß geschrieben.
Das mit dem Namensraum für OptionParser in parse_options() habe ich selbst herausgefunden (stolz sei :-), nachdem ich Dookies Korrektur umgesetzt habe und der Interpreter mir eben diesen Fehler präsentierte.
Was allerdings noch nicht läuft ist:
Im Moment wird die Hilfe und usage bei jedem Durchlauf angezeigt, ich hätte sie gerne nur dann angezeigt, wenn keine Komandozeilen Parameter übergeben werden.
cu Sebastian
Wie dumm von mir, solch einen Fehler hätte ich eigentlich selbst finden müssen. Aber ich habe wohl zu lange vorm Rechner gesessen. Dank dir.
@ Leonidas:
__version__ hatte ich groß geschrieben, weil es während der Laufzeit nicht verändert wird also statisch ist.
Hier im Forum hat jemand gesagt er würde statische Variablen groß schreiben, das finde ich sinnig also habe ich sie groß geschrieben.
Das mit dem Namensraum für OptionParser in parse_options() habe ich selbst herausgefunden (stolz sei :-), nachdem ich Dookies Korrektur umgesetzt habe und der Interpreter mir eben diesen Fehler präsentierte.
Was allerdings noch nicht läuft ist:
Code: Alles auswählen
def parse_options():
...
# shows help if there are no arguments
if len(args) == 0:
parser.print_help()
# sys.exit(0) # stop the programm.
#just for testing ------------------------------------------- [1]
else:
print "options: ", options.thumb_height
cu Sebastian
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
__version__ hat aber einen etwas speziellen Status, was schon durch die zwei __ angedeutet wird. Dabei gibt es keine Konstanten in Python, somit kann man nicht von statischen Variablen (ist ein Widerspruch in sich) sprechen.Mr_Snede hat geschrieben:__version__ hatte ich groß geschrieben, weil es während der Laufzeit nicht verändert wird also statisch ist.
Hier im Forum hat jemand gesagt er würde statische Variablen groß schreiben, das finde ich sinnig also habe ich sie groß geschrieben.
Auch kein Problem:Mr_Snede hat geschrieben:Im Moment wird die Hilfe und usage bei jedem Durchlauf angezeigt, ich hätte sie gerne nur dann angezeigt, wenn keine Komandozeilen Parameter übergeben werden.
Code: Alles auswählen
def parse_options():
"""parses and returns commandline options"""
#Usage-Text angeben und Parser-Objekt erzeugen
usage = "\n %prog [thumb_height] \n\n" + \
" generates a thumbnail for every pic in a folder \n" + \
" by Sebastian Koch 2005 "
version = "%prog " + __version__
parser = optparse.OptionParser(usage = usage, version = version)
parser.add_option("-y", "--thumb_height",
action="store", type="int", dest="thumb_height", default = 100,
help = "(in pixel) used to calculate thumb_width by aspectratio of inputpic --> default = 100" )
#parse options
(options, args) = parser.parse_args()
# shows help if there are no arguments
if len(sys.argv) <= 1:
parser.print_help()
# sys.exit(0) # stop the programm.
#just for testing ------------------------------------------- [1]
else:
print "options: ", options.thumb_height
return (options, args)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
@Leonidas
mit sys.argv habe ich es hinbekommen, danke.
Ich werde noch den Suchpfad für Bilder als möglichen Übergabeparameter einbauen und dann mein Werk posten.
Dann kann ich mich zum Wochenende ans GUI machen (freu).
cu Sebastian
mit sys.argv habe ich es hinbekommen, danke.
Jau das tut mir beim Lesen selbst in den Augen weh ;-)statischen Variablen (ist ein Widerspruch in sich)
Ich werde noch den Suchpfad für Bilder als möglichen Übergabeparameter einbauen und dann mein Werk posten.
Dann kann ich mich zum Wochenende ans GUI machen (freu).
cu Sebastian
Wie benutze ich mit optparse Listen als Parameter/Defaultwert?
Wenn ich bei [1] type="string" angebe meckert der Interpreter:
Was ich ja nachvollziehen kann da ja eine Liste kein String ist sondern in diesem Fall nur Strings enthält.
Einen String wie etwa "jpg-png-..." zu benutzen und den dann wieder in eine Liste aufzusplitten kann doch nicht der einzige Weg sein.
cu Sebastian
Wenn ich bei [1] type="string" angebe meckert der Interpreter:
Code: Alles auswählen
TypeError: cannot concatenate 'str' and 'list' objects
Einen String wie etwa "jpg-png-..." zu benutzen und den dann wieder in eine Liste aufzusplitten kann doch nicht der einzige Weg sein.
cu Sebastian
Code: Alles auswählen
#!/usr/bin/python
# -*- encoding: latin-1 -*-
import sys, os, Image, optparse, string
def parse_options():
# ... gekürzt
# create parser object
parser = optparse.OptionParser()
# ... gekürzt
parser.add_option("-p", "--pic_list",
action="store",
type="??????", # <----------------------- [1]
dest="pic_list",
default = ["jpg", "jpeg", "jp2", "png", "gif", "bmp", "tiff"],
help = "Image format that will be processed \n --> default = jpg, jpeg, jp2, png, gif, bmp, tiff")
# ... gekürzt
def main():
#Optionen und Argumente parsen
(options, args) = parse_options()
every_image_in_folder(options.pic_search_directory, options.thumb_height, options.pic_list)
if __name__ == '__main__':
main()
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Wie wärs denn damit?
Wer gibt denn schon eine Liste wie ['png', 'psd', 'xbm', 'xpm', 'svg'] als commandline Parameter an? da ist es doch besser png,psd,xbm,xpm zu nehmen.
Code: Alles auswählen
#!/usr/bin/python
# -*- encoding: latin-1 -*-
import sys, os, optparse
def parse_options():
parser = optparse.OptionParser()
parser.add_option("-p", "--pic_list",
action="store",
type="string", # <----------------------- [1]
dest="pic_list",
default = "jpg, jpeg, jp2, png, gif, bmp, tiff",
help = "Image format that will be processed \n --> default = jpg, jpeg, jp2, png, gif, bmp, tiff")
(options, args) = parser.parse_args()
options.pic_list = options.pic_list.split(',')
print options.pic_list
def main():
parse_options()
if __name__ == '__main__':
main()
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Dank an Leonidas und den anderen.
Mittlerweile habe ich alle geplanten Funktionen implementiert, jetzt muss ich noch etwas testen und dann werde ich mal dazu eine kleine GUI zu bauen.
os.listdi() gibt ja auch Ordner aus. Daraus ein Thumbnail zu machen ist ja etwas unsinnig. Deswegen habe ich mir folgendes[1] ausgedacht um die Ordner zu überspringen:
Ist das eine übliche Vorgehensweise? Wenn nein wie währt ihr das angegangen?
Habt ihr sonst noch Anmerkungen vielleicht in Hinblick auf's kommende GUI?
Cu Sebastian
Hier mal die aktuellste Version:
Mittlerweile habe ich alle geplanten Funktionen implementiert, jetzt muss ich noch etwas testen und dann werde ich mal dazu eine kleine GUI zu bauen.
os.listdi() gibt ja auch Ordner aus. Daraus ein Thumbnail zu machen ist ja etwas unsinnig. Deswegen habe ich mir folgendes[1] ausgedacht um die Ordner zu überspringen:
Code: Alles auswählen
for this_file in os.listdir(input_folder):
if os.path.isfile(os.path.join(input_folder, this_file)) == 1:
...
else:
print "\n! " + os.path.join(input_folder, this_file) + " is a folder not a file"
Habt ihr sonst noch Anmerkungen vielleicht in Hinblick auf's kommende GUI?
Cu Sebastian
Hier mal die aktuellste Version:
Code: Alles auswählen
#!/usr/bin/python
# -*- encoding: latin-1 -*-
import sys, os, Image, optparse, string
__version__ = "0.0.5"
def parse_options():
"""
parses and returns commandline options
"""
#define usage-text
usage = "\n %prog [thumb_height] \n\n" + \
" Description: \n" + \
" Generates a thumbnail for every pic in a folder \n" + \
" by Sebastian Koch 2004 "
version = "%prog " + __version__
# create parser object
parser = optparse.OptionParser(usage = usage, version = version)
parser.add_option("-y", "--thumb_height",
action="store", type="int", dest="thumb_height", default = 100,
help = "(in pixel) used to calculate thumb_width by aspectratio of inputpic --> default = 100")
parser.add_option("-p", "--pic_list",
action = "store", type = "string", dest = "pic_list", default = "jpg,jpeg,jp2,png,gif,bmp,tiff",
help = "Image format that will be processed --> default = jpg, jpeg, jp2, png, gif, bmp, tiff")
parser.add_option("-d", "--directory",
action="store", type="string", dest="pic_search_directory", default = os.getcwd(),
help = "Path where the pictures lay to be 'thumbnaild' --> default = current working directory")
#parse options
(options, args) = parser.parse_args()
options.pic_list = options.pic_list.split(',')
#print options.pic_list
if len(sys.argv) <=1:
print "Running without Arguments by using following defaults:"
print "-->Thumb_heigt = 100, pic_list = jpg, jpeg, jp2, png, gif, bmp, tiff"
print "--> pic_search_directory = ", os.getcwd(), "\n"
print "For help run: ", sys.argv[0], "-h or --help \n\n"
else:
#print "height used for thumbgenerating: ", options.thumb_height
print "For help run: ", sys.argv[0], "-h or --help \n\n"
return (options, args)
def create_thumb(file_full_path, thumb_height):
""" creates a thumb of a pic by a given height with original aspectratio
Paramters:
file_full_path = path/to/file.ext
thumb_height = (in pixel) used to calculate thumb_width by aspectratio of inputpic
"""
no_extension = os.path.splitext(file_full_path)[0]
im = Image.open(file_full_path)
original_width, original_height = im.size
thumb_width = thumb_height * original_width / original_height
im.thumbnail((thumb_width, thumb_height), Image.ANTIALIAS)
im.save(no_extension + "-thumb.jpg", "JPEG")
print "\n" + "-"*10 + " Thumb created:"
print "height x width: " +"[Original:", original_height, "x", original_width, "] -" + " [Thumb:", thumb_height, "x", thumb_width, "]"
print "--> " + no_extension+ "-thumb.jpg "
def every_image_in_folder(input_folder, thumb_height, pic_list):
""" walks through a given folder and calls create_thumb() for every image
Paramters:
inputfolder = folder with original pics
thumb_height = used to call create_thumb()
"""
for this_file in os.listdir(input_folder):
if os.path.isfile(os.path.join(input_folder, this_file)) == 1: <------------------------------------[1]
if string.lower(os.path.splitext(this_file)[1][1:]) in pic_list:
create_thumb(os.path.join(input_folder, this_file), thumb_height)
else:
print "! " + this_file + " is not a pic! Or not defined in the pic_list"
else:
print "\n! " + os.path.join(input_folder, this_file) + " is a folder not a file"
def main():
#parse options and arguments
(options, args) = parse_options()
every_image_in_folder(options.pic_search_directory, options.thumb_height, options.pic_list)
if __name__ == '__main__':
main()
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Da gabs doch auch was von python-forum.de! Gute Codes, gute Besserung... ähhh Diskussion.Mr_Snede hat geschrieben:os.listdi() gibt ja auch Ordner aus. Daraus ein Thumbnail zu machen ist ja etwas unsinnig. Deswegen habe ich mir folgendes[1] ausgedacht um die Ordner zu überspringen:Ist das eine übliche Vorgehensweise? Wenn nein wie währt ihr das angegangen?Code: Alles auswählen
for this_file in os.listdir(input_folder): if os.path.isfile(os.path.join(input_folder, this_file)) == 1: ... else: print "\n! " + os.path.join(input_folder, this_file) + " is a folder not a file"
Ja. Bitte keine Qt GUI, die wird dann alle Windows'ler ausschließen (zumindest bis Qt4, aber ob PyQt mitzieht ist unbekannt).Mr_Snede hat geschrieben:Habt ihr sonst noch Anmerkungen vielleicht in Hinblick auf's kommende GUI?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Ich werde auch QT ausprobieren (wie alle anderen auch für die ich Bindings via apt-get bekomme ) default wird aber tk.Ja. Bitte keine Qt GUI, die wird dann alle Windows'ler ausschließen (zumindest bis Qt4, aber ob PyQt mitzieht ist unbekannt).
Das ist mir nu aber peinlich, da habe ich letztens noch reingeschaut.Da gabs doch auch was von python-forum.de! Gute Codes, gute Besserung... ähhh Diskussion.
cu Sebastian
Nun habe ich mir ein kleines GUI zusammengebastelt.
Leider bekomme ich eine Fehlermeldung, wenn den "los" Button betätige:
Mit dieser Fehlermeldung kann ich nicht viel anfangen.
Meine einziger Ansatz gienge in die Richtung der Gültigkeit von Namensräumen.
zum schnelleren Einsteigen:
Button "los" (Zeile:147) ruft create_them() (Zeile:108) auf
create_them() ruft every_image_in_folder() (Zeile:60) auf
every_image_in_folder() ruft create_thumb() (Zeile:78)
Ich glaube, ich werde den gesamten Programmablauf noch einmal überdenken, das ist mir alles etwas zu kompliziert.
Leider bekomme ich eine Fehlermeldung, wenn den "los" Button betätige:
Code: Alles auswählen
Traceback (most recent call last):
File "/usr/lib/python2.3/lib-tk/Tkinter.py", line 1345, in __call__
return self.func(*args)
File "tk-ni2t.py", line 110, in create_them
every_image_in_folder(pic_dir, thumb_height, pic_list)
File "tk-ni2t.py", line 69, in every_image_in_folder
create_thumb(os.path.join(input_folder, this_file), thumb_height)
File "tk-ni2t.py", line 87, in create_thumb
im = Image.open(file_full_path)
AttributeError: class Image has no attribute 'open'
Meine einziger Ansatz gienge in die Richtung der Gültigkeit von Namensräumen.
zum schnelleren Einsteigen:
Button "los" (Zeile:147) ruft create_them() (Zeile:108) auf
create_them() ruft every_image_in_folder() (Zeile:60) auf
every_image_in_folder() ruft create_thumb() (Zeile:78)
Ich glaube, ich werde den gesamten Programmablauf noch einmal überdenken, das ist mir alles etwas zu kompliziert.
Code: Alles auswählen
#!/usr/bin/python
# -*- encoding: latin-1 -*-
import sys, os, Image, string, optparse
from Tkinter import *
import tkFileDialog
__version__ = "0.0.6"
#----------------------------------------------------------
def parse_options():
"""
parses and returns commandline options
"""
#define usage-text
usage = "\n %prog [thumb_height] \n\n" + \
" Description: \n" + \
" Generates a thumbnail for every pic in a folder \n" + \
" by Sebastian Koch 2004 "
version = "%prog " + __version__
# create parser object
parser = optparse.OptionParser(usage = usage, version = version)
parser.add_option("-y", "--thumb_height",
action="store", type="int", dest="thumb_height", default = 100,
help = "(in pixel) used to calculate thumb_width by aspectratio of inputpic --> default = 100")
parser.add_option("-p", "--pic_list",
action = "store", type = "string", dest = "pic_list", default = "jpg,jpeg,jp2,png,gif,bmp,tiff",
help = "Image format that will be processed --> default = jpg, jpeg, jp2, png, gif, bmp, tiff")
parser.add_option("-d", "--directory",
action="store", type="string", dest="pic_dir", default = os.getcwd(),
help = "Path where the pictures lay to be 'thumbnaild' --> default = current working directory")
#parse options
(options, args) = parser.parse_args()
#string of pic types "jpg, png, ..." -> list of pic types ['jpg', 'png', ...]
options.pic_list = options.pic_list.split(',')
if len(sys.argv) <=1:
print "Running without Arguments by using following defaults:"
print "-->Thumb_heigt = 100, pic_list = jpg, jpeg, jp2, png, gif, bmp, tiff"
print "--> pic_dir = ", os.getcwd(), "\n"
print "For help run: ", sys.argv[0], "-h or --help \n\n"
else:
#print "height used for thumbgenerating: ", options.thumb_height
print "For help run: ", sys.argv[0], "-h or --help \n\n"
return (options, args)
#----------------------------------------------------------
def every_image_in_folder(input_folder, thumb_height, pic_list):
""" walks through a given folder and calls create_thumb() for every image
Paramters:
inputfolder = folder with original pics
thumb_height = used to call create_thumb()
"""
for this_file in os.listdir(input_folder):
if os.path.isfile(os.path.join(input_folder, this_file)) == 1:
if string.lower(os.path.splitext(this_file)[1][1:]) in pic_list:
create_thumb(os.path.join(input_folder, this_file), thumb_height)
else:
print "! " + this_file + " is not a pic! Or not defined in the pic_list"
else:
print "\n! " + os.path.join(input_folder, this_file) + " is a folder not a file"
#----------------------------------------------------------
def create_thumb(file_full_path, thumb_height):
""" creates a thumb of a pic by a given height with original aspectratio
Paramters:
file_full_path = path/to/file.ext
thumb_height = (in pixel) used to calculate thumb_width by aspectratio of inputpic
"""
no_extension = os.path.splitext(file_full_path)[0]
print "file_full_path:" , file_full_path
im = Image.open(file_full_path)
original_width, original_height = im.size
thumb_width = thumb_height * original_width / original_height
im.thumbnail((thumb_width, thumb_height), Image.ANTIALIAS)
im.save(no_extension + "-thumb.jpg", "JPEG")
print "\n" + "-"*10 + " Thumb created:"
print "height x width: " +"[Original:", original_height, "x", original_width, "] -" + " [Thumb:", thumb_height, "x", thumb_width, "]"
print "--> " + no_extension+ "-thumb.jpg "
#----------------------------------------------------------
def tk_gui(pic_dir, thumb_height, pic_list):
"""
creates a Tkinter GUI
"""
def open_it():
pic_dir = tkFileDialog.askdirectory()
btn_pic_dir["text"] = pic_dir
def create_them():
#print "pic_dir: ", pic_dir, "\n" + "thumb_height: ", thumb_height, "\n" + "pic_list: ", pic_list
every_image_in_folder(pic_dir, thumb_height, pic_list)
master = Tk()
# ---- widget creation
lbl_pic_dir = Label(master, text = "Picture Directory:")
lbl_thumb_height = Label(master, text="Thumb height:")
btn_ende = Button(master, text = "Quit")
btn_pic_dir = Button(master, text = "Picture Directory")
entry_thumb_height = Entry(master)
btn_los = Button(master, text = "Los")
# ---- basic placement
lbl_pic_dir.grid(row = 0, column = 0, sticky = "w")
lbl_thumb_height.grid(row=1, column = 0, sticky = "w")
btn_ende.grid(row = 2, column = 0, sticky = "w")
btn_pic_dir.grid(row = 0, column = 1, sticky = "ew")
entry_thumb_height.grid(row = 1, column = 1, sticky = "ew")
btn_los.grid(row = 2, column = 1, sticky = "e")
# ---- enhanced widget settings (style + Funktions)
master.title("tk-images2thumbs")
master.columnconfigure(1, weight=1)
lbl_pic_dir.config(underline = 0)
lbl_thumb_height.config(underline = 0)
btn_ende.config(relief = GROOVE, fg = "#B00000", command = master.destroy, underline = 0) #B00000 = red
btn_pic_dir.config(relief = SUNKEN, text = pic_dir, command = open_it, bg = "white")
entry_thumb_height.config(bg = "white")
entry_thumb_height.insert(0, thumb_height)
btn_los.config(relief = GROOVE, fg = "#007500", underline = 0)#007500 = green
btn_los.config(command = create_them)
master.mainloop()
#----------------------------------------------------------
def main():
#parse options and arguments
(options, args) = parse_options()
tk_gui(options.pic_dir, options.thumb_height, options.pic_list)
if __name__ == '__main__':
main()
-
- Python-Forum Veteran
- Beiträge: 1209
- Registriert: Montag 29. September 2003, 17:18
- Wohnort: Purkersdorf (bei Wien [Austria])
Hi!
Ich muss gestehen, dass ich mich mit Image nicht wirklich auskenne, aber gehört das nicht so:
Gruß, mawe
Ich muss gestehen, dass ich mich mit Image nicht wirklich auskenne, aber gehört das nicht so:
Code: Alles auswählen
im = Image(file_full_path)
im.open()
Das Problem ist hier
Es gibt ein 'Tkinter.Image' das Du in der zweiten Zeile unter dem Namen 'Image' importierst. Womit man mal wieder ein schönes Beispiel dafür hat, das/warum 'from ... import *' schlecht ist.
Bei Tkinter holt man sich damit mal eben ca. 170 Namen in das Modul.
Code: Alles auswählen
import ..., Image, ...
from Tkinter import *
Bei Tkinter holt man sich damit mal eben ca. 170 Namen in das Modul.
Hallo mawe,
die Thumbnailerzeugung basiert auf einem Beispielcode (Create JPEG Thumbnails) aus dem PIL Handbuch.
Während der Arbeit an der Commandline Version hat die Prozedur create_thumb() noch funktioniert - nur will sie seit meiner Implementation des GUI nicht mehr so wie ich...
Ich werde aber mal den ...
Ich lese gerade BlackJack' Post in der Vorschau - also doch ein Problem mit dem Namenraum.
Das werde ich direkt mal ausprobieren
danke euch
<edit>... heute wird das nix mehr, mein Bett ruft</edit>
die Thumbnailerzeugung basiert auf einem Beispielcode (Create JPEG Thumbnails) aus dem PIL Handbuch.
Während der Arbeit an der Commandline Version hat die Prozedur create_thumb() noch funktioniert - nur will sie seit meiner Implementation des GUI nicht mehr so wie ich...
Ich werde aber mal den ...
Ich lese gerade BlackJack' Post in der Vorschau - also doch ein Problem mit dem Namenraum.
Das werde ich direkt mal ausprobieren
danke euch
<edit>... heute wird das nix mehr, mein Bett ruft</edit>
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
* imports sind nunmal evil, das würde ich keinem empfehlen, aber besonders Tkinter Programmierer tun sowas. In wx hatte das damals noch sinn, da alle Namen davor ein wx hatten, aber nun ist das unnötig, da jetzt alles im wx Namespace liegt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice