Soyez le premier à donner votre avis sur cette source.
Vue 15 067 fois - Téléchargée 579 fois
# -*- coding: cp1252 -*- """ Albumeur photo: script python écrit par VyCHNou (vychnou@hotmail.com) Transforme un répertoire contenant des photos en album photo html avec création de thumbnails et de réductions des photos. """ import os, sys, Image, time from optparse import OptionParser def resize(im,x,y): """retourne l'image redimensionnée(diminution) en gardant les proportions""" if ((im.size[0]/x)>(im.size[1]/y)): coeffResize=float(im.size[0]/float(x)) else: coeffResize=float(im.size[1]/float(y)) return im.resize((int(round((im.size[0]/coeffResize))),int(round((im.size[1]/coeffResize))))) def fichierOk(dir, fic): """retourne True si le fichier est ok, False sinon""" fic=fic.lower() if (os.path.isfile(dir+os.sep+fic) and fic[len(fic)-4:len(fic)]==".jpg" and fic[0:6]!="petit_" and fic[0:6]!="moyen_"): return True else: return False listePhotos=[] parser=OptionParser() parser.add_option("-i", "--i", "--interactif", dest="interactif", action="store_true", default=False, help="lance le script en mode interactif)") parser.add_option("-d", "--d", "--dossier", action="store", dest="dossier", type="string", help="dossier a transformer en album photo") parser.add_option("--html", "--fichier_html", action="store", dest="html", type="string", help="nom du fichier html genere", default="index.html") parser.add_option("--css", "--fichier_css", action="store", dest="css", type="string", help="nom du fichier css utilise (pas d'option=pas de fichier css utilise)") parser.add_option("-t", "--t", "--titre", action="store", dest="titre", type="string", help="titre de l'album", default="album photo") parser.add_option("-c", "--c", "--commentaire", action="store", dest="commentaire", type="string", help="commentaire sur l'album", default="Quelques photos du dossier ") parser.add_option("--nc", "--nombre_colonnes", action="store", dest="nombre_colonnes", type="int", help="nombre de colonnes de photos", default=4) parser.add_option("--lm", "--largeur_miniature", action="store", dest="largeur_miniature", type="int", help="largeur en pixels d'une miniature (thumbnail)", default=200) parser.add_option("--hm", "--hauteur_miniature", action="store", dest="hauteur_miniature", type="int", help="hauteur en pixels d'une miniature (thumbnail)", default=200) parser.add_option("--lr", "--largeur_reduction", action="store", dest="largeur_reduction", type="int", help="largeur en pixels d'une reduction", default=800) parser.add_option("--hr", "--hauteur_reduction", action="store", dest="hauteur_reduction", type="int", help="hauteur en pixels d'une reduction", default=600) parser.add_option("-q", "--q", "--qualite", action="store", dest="qualite", type="int", help="qualite des miniatures", default=80) (options, args) = parser.parse_args() if (options.interactif): options.dossier=raw_input("repertoire a transformer en album photo ? >>") options.html=raw_input("nom du fichier html album photo ? >>") options.titre=raw_input("titre de votre album ? >>") options.commentaire=raw_input("commentaire sur votre album ? >>") options.nombre_colonnes=int(raw_input("nombre de colonnes de photo ? >>")) options.largeur_miniature=int(raw_input("largeur des miniatures ? >>")) options.hauteur_miniature=int(raw_input("hauteur des miniatures ? >>")) options.largeur_reduction=int(raw_input("largeur des photos allegees? >>")) while (options.largeur_miniature>=options.largeur_reduction): print "Miniature doit etre moins large que photo allegee" options.largeur_reduction=int(raw_input("largeur des photos allegees? >>")) options.hauteur_reduction=int(raw_input("hauteur des photos allegees? ? >>")) while (options.hauteur_miniature>=options.hauteur_reduction): print "Miniature doit etre moins haute que photo allegee" options.hauteur_reduction=int(raw_input("hauteur des photos allegees? ? >>")) options.qualite=int(raw_input("qualite des miniatures ?(chiffre entre 1 et 100) >>")) #on liste les fichiers du répertoire listePhotos=[] for fichier in os.listdir(options.dossier): if (fichierOk(options.dossier,fichier)): listePhotos.append(fichier) print str(len(listePhotos))+" images a traiter dans "+options.dossier nbImages=len(listePhotos) cptImage=1 pourtrenteage=0 pourtrenteagetmp=0 #on parcours tous les fichiers du dossier entré for fichier in listePhotos: #on ouvre le fichier image im = Image.open(options.dossier+os.sep+fichier) #on ouvre le fichier de la réduction outfile=options.dossier+os.sep+"moyen_"+fichier try: #on met à l'échelle la réduction im=resize(im,options.largeur_reduction,options.hauteur_reduction) #on la sauvegarde dans le fichier dont le nom commence par moyen_ #en qualité maximale im.save(outfile,quality=100) except IOError: print "cannot convert" im = Image.open(options.dossier+os.sep+fichier) #on ouvre le fichier de la miniature outfile=options.dossier+os.sep+"petit_"+fichier try: #on met à l'échelle la miniature im=resize(im,options.largeur_miniature,options.hauteur_miniature) #on sauvegarde la miniature à la qualité voulue dans le fichier dont le #nom commence par petit_ et à la qualité voulue im.save(outfile,quality=options.qualite) except IOError: print "cannot convert" #on affiche un renseignement sur la console #print "{"+str(cptImage)+"/"+str(nbImages)+"} Fichier [ "+fichier+" ] traite" ratio=(float)(cptImage)/nbImages str="[" for i in range((int)(50*ratio)): str=str+"#" for i in range((int)(50-(50*ratio))): str=str+" " str=str+"]" print str cptImage=cptImage+1 #On calcule le nombre de lignes à partir du nombre de colonnes et du nombre de photos nombreDeLignes=int(round(float(len(listePhotos))/float(options.nombre_colonnes))) #on ajuste la derniere ligne if (nombreDeLignes<(float(len(listePhotos))/float(options.nombre_colonnes))): nombreDeLignes=nombreDeLignes+1 #On génère le début du code html if (options.css!=None): codecss= '''<style type="text/css" title="default" media="screen"> @import "'''+nomCss+'''"; </style>''' else: codecss="" album_photo_html=''' <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/HTML4/loose.dtd"> <head> <title>'''+options.titre+'''</title> '''+codecss+''' <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> \n<body> <h1>'''+options.titre+'''</h1> '''+options.commentaire+''' <table width="100%" border="0"> ''' site="http://vychnou.info/test" #on va maintenant construire le tableau HTML de photos #pour chaque ligne de photos à créer: for i in range(nombreDeLignes): j=0 #nouvelle ligne de la table: album_photo_html=album_photo_html+' <tr>' #ajout de chaque photo dans une balise img, génération des liens etc..: while (j<options.nombre_colonnes and ((i*options.nombre_colonnes)+j)<len(listePhotos)): album_photo_html=album_photo_html+'<td>\n <a href="moyen_'+listePhotos[(i*options.nombre_colonnes)+j]+'''"> <img src="petit_'''+listePhotos[(i*options.nombre_colonnes)+j]+'" alt="'+listePhotos[(i*options.nombre_colonnes)+j]+'''"/></a><br>\n <a href="'''+listePhotos[(i*options.nombre_colonnes)+j]+'">'+listePhotos[(i*options.nombre_colonnes)+j]+'</a>\n </td>\n' j=j+1 #fin de ligne de la table: album_photo_html=album_photo_html+'</tr>' album_photo_html=album_photo_html+''' </table> <i>album photo réalisé à l'aide d'un script python écrit par VyCHNou (vychnou@hotmail.com)</i> </body> ''' #on ouvre le fichier dans lequel on veut le sauvegarder f=open(options.dossier+os.sep+options.html,"w") #on écrit dedans ce code html f.write(album_photo_html) f.close() #on informe l'utilisateur de la fin des opérations print "\n>>>Fichier [ "+options.dossier+os.sep+options.html+ "] cree\n\n>>>>>>ALBUM PHOTO CREE<<<<<<"
8 janv. 2007 à 10:03
C'est à peu près comme ça que tu vois les choses?
Si c'est ça je vais m'y atteler, c'est vrai que ça pourrait être pratique!
7 janv. 2007 à 12:44
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.