473,386 Members | 1,801 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,386 software developers and data experts.

python image thumbnail generator?

Hi. I run a website for my band, and the other guys want an image gallery.

I'm thinking it would be nice and easy, if we could just upload a jpg into
a dir called "gallery/". When the client clicks the "gallery" link, a
cgi script could search the gallery/ dir, and create thumbnails of any
jpeg images that don't already have a thumbnail associated with them. The
script could then generate a page of clickable thumbnails.

A few questions:

(1) Can this be done with python? If so, what module do I need to look up?

(2) If it can't be done with python, is there some small utility that will
do it for me? Something I could easily install locally in my own
"public_html" dir on my website?

(3) Is this the sort of thing which, if done regularly, would hog far far
too much of my webhosts system resources?

(4) Am I talking about re inventing the wheel?

Aug 28 '05 #1
8 4778
"Chris Dewin" <ch***@wintergreen.in> writes:
(1) Can this be done with python? If so, what module do I need to look up?


You could do it with PIL, or run jpegtran in an external process.
jpegtran may be easier.
Aug 28 '05 #2
Chris Dewin wrote:
Hi. I run a website for my band, and the other guys want an image gallery.

I'm thinking it would be nice and easy, if we could just upload a jpg into
a dir called "gallery/". When the client clicks the "gallery" link, a
cgi script could search the gallery/ dir, and create thumbnails of any
jpeg images that don't already have a thumbnail associated with them. The
script could then generate a page of clickable thumbnails.

A few questions:

(1) Can this be done with python? If so, what module do I need to look up?

PIL can certainly handle the functionality.
(2) If it can't be done with python, is there some small utility that will
do it for me? Something I could easily install locally in my own
"public_html" dir on my website?

The core function looks something like this:

import Image # this is PIL

def getThumbnail( filename, size = (32,32) ):
'''Get a thumbnail image of filename'''
image = Image.open(filename)
rx, ry = image.size[0]/float(size[0]), image.size[1]/float(size[1])
if rx > ry:
resize = int(size[0]), int(round(image.size[1]*(1.0/rx), 0))
else:
resize = int(round(image.size[0]*(1.0/ry), 0)), int(size[1])
image = image.resize( resize, Image.BILINEAR )
newimage = Image.new( 'RGB', size, )
x,y = image.size
newimage.paste(
image, ((size[0]-x)/2, (size[1]-y)/2),
)
return newimage

then you call newImage.save( filename, format ) to save the result.
(3) Is this the sort of thing which, if done regularly, would hog far far
too much of my webhosts system resources?

As long as you *only* generate images for sources that don't yet have
(or are newer than) their thumbnail you should be fine.
(4) Am I talking about re inventing the wheel?

Probably. ZPhotoSlides (a Zope product) provides thumnailing,
slideshows and the like, probably closer to what you'd want for this
kind of application. You'll probably find other non-Zope versions as well.

Good luck,
Mike

--
________________________________________________
Mike C. Fletcher
Designer, VR Plumber, Coder
http://www.vrplumber.com
http://blog.vrplumber.com

Aug 28 '05 #3
>I'm thinking it would be nice and easy, if we could just upload a jpg into
a dir called "gallery/". When the client clicks the "gallery" link, a
cgi script could search the gallery/ dir, and create thumbnails of any
jpeg images that don't already have a thumbnail associated with them. The
script could then generate a page of clickable thumbnails.


I dunno about the scripting aspect, but I use Python to generate my
website, I already had the images (of the products I sell). I used PIL
to generate thumbnails of the images. I think it took 2 or 3 lines of
Python - that is: for me. PIL is of course a bit more.


Wouter van Ooijen

-- ------------------------------------
http://www.voti.nl
Webshop for PICs and other electronics
http://www.voti.nl/hvu
Teacher electronics and informatics
Aug 28 '05 #4
On Saturday 27 August 2005 09:06 pm, Chris Dewin wrote:
I'm thinking it would be nice and easy, if we could just upload a jpg into
a dir called "gallery/". When the client clicks the "gallery" link, a
cgi script could search the gallery/ dir, and create thumbnails of any
jpeg images that don't already have a thumbnail associated with them. The
script could then generate a page of clickable thumbnails.


This is trivial to do with Zope. I wrote a "VarImage" product for it
that will do the image manipulation you want handily. I never really
created a "gallery" product for it because it's so trivial to do with a
regular Zope folder and a couple of scripts, but I would be happy to
share my Gallery template with you if your interested.

The current version of VarImage even implements things like HTTP_REFERER
blocking (or watermarking if you prefer), to discourage remote-linking
of your images, etc.

An online example can be seen here: http://narya.net/Gallery

Not sure about CGI methods of doing it, though.
--
Terry Hancock ( hancock at anansispaceworks.com )
Anansi Spaceworks http://www.anansispaceworks.com

Aug 28 '05 #5
Paul Rubin wrote
(1) Can this be done with python? If so, what module do I need to look
up?


You could do it with PIL, or run jpegtran in an external process.
jpegtran may be easier.


eh? are you sure you know what jpegtran does?

JPEGTRAN(1)
JPEGTRAN(1)

NAME
jpegtran - lossless transformation of JPEG files

SYNOPSIS
jpegtran [ options ] [ filename ]

DESCRIPTION
jpegtran performs various useful transformations of JPEG files. It
can
translate the coded representation from one variant of JPEG to
another,
for example from baseline JPEG to progressive JPEG or vice versa.
It
can also perform some rearrangements of the image data, for
example
turning an image from landscape to portrait format by rotation.

jpegtran works by rearranging the compressed data (DCT
coefficients),
without ever fully decoding the image /.../

</F>

Aug 29 '05 #6
Mike C. Fletcher wrote:
The core function looks something like this:

import Image # this is PIL

def getThumbnail( filename, size = (32,32) ):
'''Get a thumbnail image of filename'''
image = Image.open(filename)
rx, ry = image.size[0]/float(size[0]), image.size[1]/float(size[1])
if rx > ry:
resize = int(size[0]), int(round(image.size[1]*(1.0/rx), 0))
else:
resize = int(round(image.size[0]*(1.0/ry), 0)), int(size[1])
image = image.resize( resize, Image.BILINEAR )


footnote: if you're creating thumbnails from JPEG or PhotoCD
images, using the "thumbnail" method can be a lot more efficient
(unlike resize, it tweaks the codec so it doesn't have to load the
entire full-sized image).

footnote 2: Image.ANTIALIAS is slower, but tends to give a
much better result than Image.BILINEAR, especiall for "noisy"
images.

</F>

Aug 29 '05 #7
"Fredrik Lundh" <fr*****@pythonware.com> writes:
You could do it with PIL, or run jpegtran in an external process.
jpegtran may be easier.


eh? are you sure you know what jpegtran does?

JPEGTRAN(1)


Whoops, sorry, right, jpegtran is for rotating the images. I meant:
use a pipeline like

djpeg -scale 1/4 | cjpeg

That's how I usually do it. Main disadvantage is the scale factor has
to be 1/2, 1/4, 1/8, etc., not arbitrary amounts like 0.3456.
Aug 29 '05 #8
Chris Dewin wrote:
Hi. I run a website for my band, and the other guys want an image gallery.

I'm thinking it would be nice and easy, if we could just upload a jpg into
a dir called "gallery/". When the client clicks the "gallery" link, a
cgi script could search the gallery/ dir, and create thumbnails of any
jpeg images that don't already have a thumbnail associated with them. The
script could then generate a page of clickable thumbnails.


Once I made an example mod_python handler, that resized images on the fly.
For example:
http://server/folder/image.jpg - would give you the original image, served
directly by apache without any performance hit.

http://server/folder/image.jpg?thumbnail - would resize the picture (and
cache the result on disk) and return that, on a second request it would
return the cached image very fast by calling an apache.send_file function.

see
http://www.modpython.org/pipermail/m...er/016471.html

--
damjan
Aug 29 '05 #9

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

0
by: Chris McKeever | last post by:
I am trying to modify the Mailman Python code to stop mapping MIME-types and use the extension of the attachment instead. I am pretty much clueless as to what I need to do here, but I think I have...
0
by: Premshree Pillai | last post by:
Hello people, I recently updated one of my Python scripts -- pyAlbum.py This is a simple, command-line based, lightweight Python script to create an image album. Of course, there are plenty...
2
by: Scott Brady Drummonds | last post by:
Can anyone recommend the easiest way of generating thumbnail images using a Python library? I've seen that the Python Image Library (PIL) seems to do this but it isn't installed on my available...
4
by: sepgy | last post by:
Can anyone help me to use a python to create an HTML photo gallery generator. When it's finished, it will be able find all the picture files (i.e. .jpg, .gif. .png files) in any given folder on the...
34
by: Blake T. Garretson | last post by:
I want to save some sensitive data (passwords, PIN numbers, etc.) to disk in a secure manner in one of my programs. What is the easiest/best way to accomplish strong file encryption in Python? ...
10
by: David W. Simmonds | last post by:
I have a DataList control that has an Image control in the ItemTemplate. I would like to resize the image that goes into that control. I have a series of jpg files that are full size, full...
4
by: John Swan | last post by:
Hello. I'm trying to create a simple program that amongst other things creates a thumbnail of an image (Bitmap) to a set size determined by the user in pixels? The problem is: All of the...
3
by: Danny Ni | last post by:
Hi, I am looking for a way to display images with different aspect ratio into frames with fixed width and height, the problem is some images will look distorted if they are forced into fixed...
1
by: dodgeyb | last post by:
Hi there, Trying to allow client to upload image, thumbnail it, and save it into sql table image field. Code compiles & runs but image cannot be retrieved. any clues what I'm doing wrong pls ! ...
0
by: taylorcarr | last post by:
A Canon printer is a smart device known for being advanced, efficient, and reliable. It is designed for home, office, and hybrid workspace use and can also be used for a variety of purposes. However,...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: aa123db | last post by:
Variable and constants Use var or let for variables and const fror constants. Var foo ='bar'; Let foo ='bar';const baz ='bar'; Functions function $name$ ($parameters$) { } ...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.