Magi

Contact info
Word
Research
   Publications
Studies
Free Software
Hobbies
Articles
Photography
About me
   Curriculum Vitae

©Marko Grönroos, 1998

USENET News sfnet.harrastus.valokuvaus

Säie: Kuvakasa -> html sivu thumbnaileilla? (unix)

Edellinen säie: Bittipimiöharmi
Seuraava säie: Tylsiä kasvi- ja siemenkuvia nähtävissä
[Muut säikeet] [Muut uutisryhmät]
Newsgroups: sfnet.harrastus.valokuvaus,sfnet.atk.linux,sfnet.atk.unix
Subject: Re: Kuvakasa -> html sivu thumbnaileilla? (unix)
From: magi AT iki PISTE fi (Marko Grönroos)
Date: 08 Dec 2000 01:42:18 +0200

"M. Tavasti" <tavastixx AT iki PISTE fi PISTE invalid> writes:
> Onkos olemassa valmista softaa (tai scriptiä, eihän tuommoinen homma
> tarvi oikeaa softaa) jolla linuxissa saa kätevästi väännettyä
> hakemistossa olevista kuvista thumbnailit ja html-pätkän, jossa on nuo
> thumbnailit ja niistä linkit oikeisiin kuviin. Kuvat ovat jpeg-muotoisia.

Itselläni on omatekemä slideshow-ohjelma, joka on tarkoitettu
kuvasarjojen näyttämiseen wepissä. Ohjelman tuottama indeksi sivu
näyttää seuraavanlaiselta:

http://magi.yok.utu.fi/~magi/kuvia/series/display.cgi/yo.ser?height=512&index=1

Kuvakokoa voi sivuilla muuttaa ja muutos säilyy selattaessa ko. kuvasarjaa.

Ongelmana vaan on, että tuo ohjelma ei tee pieniä preview-kuvia itse,
vaan käytän digikamerani tuottamia preview-kuvia, jotka kopioin
oikeaan hakemistoon komentoriviskriptillä, joka kopioi
kuvan+previewkuvan kameran tuottamasta hakemistosta. Preview-kuvan saa
tehtyä kätevimmin ImageMagickillä, esim:

$ convert -geometry x192 -quality 50 10140047-half.jpg preview/10140047-sml.jpg

(En nyt testannut tuota, mutta jotenkin tuolleen. x192 tarkoittaa siis
että pystysuunnassa tehdään 192 pikselin korkuiseksi. Ehkä convertista
voisi löytyä jokin parempikin optio.)

Kuvasarjasta on erillinen kuvaustiedosto, jossa on kullakin rivillä
kuvatiedoston nimi, §-eroitinmerkki, ja kuvan selostus. Esimerkki:

2000/10/10140047-half.jpg§Kuvausta
2000/10/10140053-half.jpg§Toisen kuvan kuvaus
2000/10/moonboat.jpg§Full moon boat
2000/10/10140036-half.jpg§
2000/10/10140077-half.jpg§At Halinen dam

Hakemistopolku on kaksi kuvatasoa ylempänä, eli jos skripti
sijoitetaan hakemistoon ~/html/kuvia/series/display.cgi, niin kuvat
pitää olla juuren ~/html/kuvia/ alla, esimerkiksiksi
~/html/kuvia/2000/10/, kuten ylläolevassa esimerkissä.

Preview-kuvien käyttö on hieman monimutkaista (minulle simppeliä). Ne
pitää olla kuvan hakemiston preview-alihakemistossa. Isojen kuvien
nimet ovat aina numeroita-half.jpg ("half" voi olla myös jokin muu
teksti). Preview-kuvan nimen pitää olla sama
numerosarja-sml.jpg. (Huomaa, että ylläolevassa esimerkissä
moonboat.jpg on virheellinen nimi, pitänee korjata).

Toivottavasti uutistenlukijani ei riko tätä tiedostoa:
-----------------------------------------------------------------------------------
#!/usr/bin/python
# Image display by Marko Grönroos, 2000

import cgi,os,re

def getCGIParam(name):
            params = cgi.FieldStorage()
            if params.has_key(name):
                        result = int(params[name].value)
            else:
                        result = 0
            return result

###############################################################################

def printHtmlHead():
            print "Content-type: text/html\n"
            print "<TITLE>Image display</TITLE>"
            print "<BODY BGCOLOR=black MARGINWIDTH=0 TEXT=white LINK=lightblue ALINK=pink VLINK=lightgreen>"

###############################################################################

def displayIndex(dbname, files):
            printHtmlHead()
            height = getCGIParam("height")
            if height>768:
                        height=768

            print "<DIV ALIGN=center>"
            print "<A HREF='../../'>^^ Up ^^</A><P>"
            print "Click on any image to get a larger view<P>"
            current = 0
            for entry in files:
                        fullname = re.split ('§', entry)[0]
                        match = re.search (r'^([0-9a-z/]+/)([0-9a-z]+)', fullname)
                        path = match.group(1) + "preview/"
                        filenum = match.group(2)
                        print "<A HREF='%s?current=%d&height=%d'>"\
                                          "<IMG SRC='../../%s%s-sml.jpg' WIDTH=256 HEIGHT=192></A>"\
                                          % (dbname, current, height, path, filenum)
                        current = current + 1
            printFooter()
            print "</DIV>"

###############################################################################

def printHeader (dbname, current, height, entries):
            printHtmlHead ()

            print "<DIV ALIGN=center><FONT SIZE=-1>"
            if current>0:
                        print " <A HREF='%s?current=%d&height=%d'><<< Previous picture <<<</A>       " % (dbname, current-1, height)

            print " [<A HREF='../../'>^^ Other series ^^</A>] "
            print str(current+1)+"/"+str(entries)
            print " [<A HREF='%s?index=1&height=%d'>^^ Image index for this series ^^</A>]" % (dbname,height)

            if current<len(files)-1:
                        print "       <A HREF='%s?current=%d&height=%d'>>>> Next picture >>></A>" % (dbname, current+1, height)

            print "</DIV><TABLE WIDTH=100% HEIGHT=100% CELLMARGIN=0><TR VALIGN=top>"\
                              "<TR><TD WIDTH=100% ALIGN=center COLSPAN=1>"

def printFooter():
            print "<BR><FONT SIZE=-1><I>"\
                              "Copyright © Marko Grönroos 2000, "\
                              "all rights reserved. "\
                              "All unauthorized use and copying prohibited.</I></FONT>"
            print "</TD></TABLE>"

###############################################################################

def displaySingle(dbname, files):
            current = getCGIParam("current")
            height = getCGIParam("height")
            if height>768:
                        height=768

            printHeader(dbname, current, height, len(files))

            # Display the selected entry
            entry = files[current]
            m = re.split ('§', entry)
            filename = m[0]
            desc = m[1]

            print "<FONT SIZE=-1>"
            print "<IMG SRC='../../"+filename+"' "
            if height>0:
                        print "HEIGHT="+str(height)+"><BR>"
            else:
                        print "><BR>"

            print "</TD><TR><TD COLSPAN=3 ALIGN=center>"

            print desc+"<P><FONT SIZE=-1>"

            print "You can change the image size here: "
            if height!=360: print "[<A HREF='%s?current=%d&height=360'>x360</A>]" % (dbname,current)
            if height!=512: print "[<A HREF='%s?current=%d&height=512'>x512</A>]" % (dbname,current)
            if height!=768: print "[<A HREF='%s?current=%d&height=768'>x768</A>]" % (dbname,current)
            if height!=0: print "[<A HREF='%s?current=%d'>full size</A>]" % (dbname,current)
            print " (doesn't change download time)"

            printFooter()


######################################################################
# MAIN

dbname = os.environ["PATH_INFO"][1:]

# Read all image entries
dir = open(dbname)
files = dir.readlines()
dir.close()

index = int (getCGIParam("index"))

if index :
            displayIndex (dbname, files)
else:
            displaySingle (dbname, files)
--------------------------------------------------------------------------------------------

--
-- Marko Grönroos, magi AT iki PISTE fi (http://www.iki.fi/magi/)
-- Paradoxes are the source of truth and the end of wisdom


Edellinen säie: Bittipimiöharmi
Seuraava säie: Tylsiä kasvi- ja siemenkuvia nähtävissä
[Muut säikeet] [Muut uutisryhmät]