views:

55

answers:

4

How can I create a python script that runs through the images (1.jpeg-n.jpeg) in a directory on a mac and displays them in a browser OR via another python program?

Do I import a file to python and than display in browser? Do I extract the file names 1,2,3,4,5 and add that to a list, which I give to another function that calls a browser and displays?

Any help would be great.

Thanks!

+3  A: 

You first have to find all image filenames. You can use os.listdir(...) to get all files in a certain directory, or glob.glob(...) to find all files matching a certain pattern.

Showing the images is the second and more challenging part of this. The first option is to open the images in an external program, this can be a web browser. On (most) platforms a command firefox 1.jpeg will open the image 1.jpeg in the Firefox browser. You can use the subprocess module to execute such commands. If you want to show them using a nice GUI, you have to create a GUI using some framework and use this. But if you are a beginner this might be a little bit too difficult for you.

For example:

import glob
import subprocess
files = glob.glob('dir/*.jpeg')
for file in files:
    subprocess.call(['firefox', file])
muksie
Fantastic! Thanks a lot! I indeed would like to finally display them via my own GUI or Django. But I need to understand how to write the python code to do that and this helped a lot!Thanks
MacPython
A: 

It might be a lot easier to just generate a static web page with pictures than building a GUI for displaying pictures. You can just generate a hmtl page, put the images on it and start your web browser with the newly created html file. this gives you some possibilities for layout as well.

If you just want a picture in the browser then muksie gave a working example.

Mattias Nilsson
Sorry I need to use Django, because this needs to integrate with Python.
MacPython
A: 

muksie's answer already contains very useful advice. If don't want to write the HTML file yourself or want something a little fancier you could use a small script I wrote for the MDP library. This basically allows you to just do:

import slideshow
slideshow.show_image_slideshow(filenames, image_size=(80,60))

This will create an HTML slideshow and open it in your browser. You can grab just the needed files here (only templet.py and the two slideshow files are needed), which might be better for you than getting the full library.

nikow
Thanks! Also very nice! I will check that! What I ultimately want to achieve is a Site where the images are displayed one after the other and below every image there would be a button with next. And the more advanced option would have multiple images on one site which would be clickable and if you click them it would display other images if you click on them.
MacPython
+1  A: 

Using Tkinter and PIL for this purpose is pretty trivial. Add muskies example to the information from this thread that contains this example:

# use a Tkinter label as a panel/frame with a background image
# note that Tkinter only reads gif and ppm images
# use the Python Image Library (PIL) for other image formats
# free from [url]http://www.pythonware.com/products/pil/index.htm[/url]
# give Tkinter a namespace to avoid conflicts with PIL
# (they both have a class named Image)

import Tkinter as tk
from PIL import Image, ImageTk

root = tk.Tk()
root.title('background image')

# pick an image file you have .bmp  .jpg  .gif.  .png
# load the file and covert it to a Tkinter image object
imageFile = "Flowers.jpg"
image1 = ImageTk.PhotoImage(Image.open(imageFile))

# get the image size
w = image1.width()
h = image1.height()

# position coordinates of root 'upper left corner'
x = 0
y = 0

# make the root window the size of the image
root.geometry("%dx%d+%d+%d" % (w, h, x, y))

# root has no image argument, so use a label as a panel
panel1 = tk.Label(root, image=image1)
panel1.pack(side='top', fill='both', expand='yes')

# put a button on the image panel to test it
button2 = tk.Button(panel1, text='button2')
button2.pack(side='top')

# save the panel's image from 'garbage collection'
panel1.image = image1

# start the event loop
root.mainloop()

Of course if you're more familiar with another GUI, go ahead and adapt the example, it shouldn't take much.

Wayne Werner
Thanks so much! That seems very promising!
MacPython