Welcome, guest | Sign In | My Account | Store | Cart
#!/usr/bin/env python

"""Program for converting image files from one format
to another. Will convert one file at a time or all
files (of a selected format) in a directory at once.
Converted files have same basename as original files.

Uses workaround: askdirectory() does not allow choosing
a new dir, so asksaveasfilename() is used instead, and
the filename is discarded, keeping just the directory.
"""

import os, os.path, string, sys
from Tkinter import *
from tkFileDialog import *
import Image

openfile
= '' # full pathname: dir(abs) + root + ext
indir
= ''
outdir
= ''
def getinfilename():
   
global openfile, indir
    ftypes
=(('Gif Images', '*.gif'),
           
('Jpeg Images', '*.jpg'),
           
('Png Images', '*.png'),
           
('Tiff Images', '*.tif'),
           
('Bitmap Images', '*.bmp'),
           
("All files", "*"))
   
if indir:
        openfile
= askopenfilename(initialdir=indir,
                                   filetypes
=ftypes)
   
else:
        openfile
= askopenfilename(filetypes=ftypes)
   
if openfile:
        indir
= os.path.dirname(openfile)

def getoutdirname():
   
global indir, outdir
   
if openfile:
        indir
= os.path.dirname(openfile)
        outfile
= asksaveasfilename(initialdir=indir,
                                    initialfile
='foo')
   
else:
        outfile
= asksaveasfilename(initialfile='foo')
    outdir
= os.path.dirname(outfile)

def save(infile, outfile):
   
if infile != outfile:
       
try:
           
Image.open(infile).save(outfile)
       
except IOError:
           
print "Cannot convert", infile

def convert():
    newext
= frmt.get()
    path
, file = os.path.split(openfile)
   
base, ext = os.path.splitext(file)
   
if var.get():
        ls
= os.listdir(indir)
        filelist
= []
       
for f in ls:
           
if os.path.splitext(f)[1] == ext:
                filelist
.append(f)
   
else:
        filelist
= [file]
   
for f in filelist:
        infile
= os.path.join(indir, f)
        ofile
= os.path.join(outdir, f)
        outfile
= os.path.splitext(ofile)[0] + newext
        save
(infile, outfile)
    win
= Toplevel(root)
   
Button(win, text='Done', command=win.destroy).pack()

# Divide GUI into 3 frames: top, mid, bot
root
= Tk()
topframe
= Frame(root,
                 borderwidth
=2,
                 relief
=GROOVE)
topframe
.pack(padx=2, pady=2)

midframe
= Frame(root,
                 borderwidth
=2,
                 relief
=GROOVE)
midframe
.pack(padx=2, pady=2)

botframe
= Frame(root)
botframe
.pack()

Button(topframe,
       text
='Select image to convert',
       command
=getinfilename).pack(side=TOP, pady=4)

multitext
= """Convert all image files
(of this format) in this folder?"""

var = IntVar()
chk
= Checkbutton(topframe,
                  text
=multitext,
                  variable
=var).pack(pady=2)
Button(topframe,
       text
='Select save location',
       command
=getoutdirname).pack(side=BOTTOM, pady=4)


Label(midframe, text="New Format:").pack(side=LEFT)
frmt
= StringVar()
formats
= ['.bmp', '.gif', '.jpg', '.png', '.tif']
for item in formats:
   
Radiobutton(midframe,
                text
=item,
                variable
=frmt,
                value
=item).pack(anchor=NW)

Button(botframe, text='Convert', command=convert).pack(side=LEFT,
                                                       padx
=5,
                                                       pady
=5)
Button(botframe, text='Quit', command=root.quit).pack(side=RIGHT,
                                                      padx
=5,
                                                      pady
=5)

root
.title('Image Converter')
root
.mainloop()

History

  • revision 4 (21 years ago)
  • previous revisions are not available