begin process at 2012 05 24 05:07:33
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Graphique

 > REDIMENSIONNER TOUTES LES IMAGES D'UN DOSSIER

REDIMENSIONNER TOUTES LES IMAGES D'UN DOSSIER


 Information sur la source

Note :
6 / 10 - par 2 personnes
6,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Graphique Classé sous :image, photos, redimensionnement, redimensionner Niveau :Débutant Date de création :06/11/2006 Vu :3 993

Auteur : jbjweb

Ecrire un message privé
Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Cette source est mon premier programme en Python.
J'ai utilisé wxPython et Boa Constructor pour le GUI, PIL pour le traitement d'image.
J'ai crée ce petit programme par nécessité de redimensionner rapidement toutes les images d'un dossier, principalement les photos en provenance de mon appareil photo numérique.

Pour faire tourner ce script, il vous faudra installer xwPython et PIL, si ce n'est pas déja fait.
J'espere que cette source sera utile :)

Source

  • #!/usr/bin/env python
  • # -*- coding: iso-8859-1 -*-
  • #pyThumbs - Auteur: JBJ
  • import wx, os, sys, glob, string, Image
  • import JpegImagePlugin
  • #import Frame1
  • #modules ={'Frame1': [1, 'Main frame of Application', u'Frame1.py']}
  • def create(parent):
  • return Frame1(parent)
  • def resizeImage(image, hauteur, largeur, destination):
  • try:
  • img = Image.open(image).convert("RGB")
  • img.thumbnail((hauteur,largeur), Image.ANTIALIAS)
  • img.save(destination)
  • return True
  • except Error:
  • return False
  • def resizeFolder(folder, hauteur, largeur):
  • try:
  • os.chdir(folder)
  • os.mkdir("thumbs")
  • compteur_img = 0
  • for nom in glob.glob('*.jpg'):
  • compteur_img+=1
  • nomImage = os.path.join(folder,"thumbs", "Image"+`compteur_img`+".jpg")
  • resizeImage(nom, hauteur, largeur, nomImage)
  • return True
  • except OSError:
  • return False
  • [wxID_FRAME1, wxID_FRAME1CHEMIN, wxID_FRAME1HAUTEUR, wxID_FRAME1LONGUEUR,
  • wxID_FRAME1PANEL1, wxID_FRAME1PARCOURIR, wxID_FRAME1REDIMENSIONNER,
  • wxID_FRAME1STATICLINE1, wxID_FRAME1STATICLINE2, wxID_FRAME1STATICLINE3,
  • wxID_FRAME1STATICTEXT1, wxID_FRAME1STATICTEXT2, wxID_FRAME1STATICTEXT3,
  • wxID_FRAME1STATUS, wxID_FRAME1STATUSBAR1,
  • ] = [wx.NewId() for _init_ctrls in range(15)]
  • class Frame1(wx.Frame):
  • def _init_ctrls(self, prnt):
  • # generated method, don't edit
  • wx.Frame.__init__(self, id=wxID_FRAME1, name='', parent=prnt,
  • pos=wx.Point(301, 152), size=wx.Size(400, 300),
  • style=wx.DEFAULT_FRAME_STYLE, title=u'JBJ pyThumbs')
  • self.SetClientSize(wx.Size(392, 266))
  • self.statusBar1 = wx.StatusBar(id=wxID_FRAME1STATUSBAR1,
  • name='statusBar1', parent=self, style=0)
  • self.statusBar1.SetLabel(u'JBJ pyThumbs - 2006 Jean-Baptiste Jung')
  • self.SetStatusBar(self.statusBar1)
  • self.panel1 = wx.Panel(id=wxID_FRAME1PANEL1, name='panel1', parent=self,
  • pos=wx.Point(0, 0), size=wx.Size(392, 243),
  • style=wx.TAB_TRAVERSAL)
  • self.staticText1 = wx.StaticText(id=wxID_FRAME1STATICTEXT1,
  • label=u'Dossier \xe0 redimensionner :', name='staticText1',
  • parent=self.panel1, pos=wx.Point(8, 16), size=wx.Size(127, 13),
  • style=0)
  • self.chemin = wx.TextCtrl(id=wxID_FRAME1CHEMIN, name=u'chemin',
  • parent=self.panel1, pos=wx.Point(8, 40), size=wx.Size(256, 21),
  • style=0, value=u'')
  • self.parcourir = wx.Button(id=wxID_FRAME1PARCOURIR,
  • label=u'Parcourir...', name=u'parcourir', parent=self.panel1,
  • pos=wx.Point(288, 40), size=wx.Size(96, 23), style=0)
  • self.parcourir.Bind(wx.EVT_BUTTON, self.OnParcourirButton,
  • id=wxID_FRAME1PARCOURIR)
  • self.staticText2 = wx.StaticText(id=wxID_FRAME1STATICTEXT2,
  • label=u'Longueur :', name='staticText2', parent=self.panel1,
  • pos=wx.Point(8, 92), size=wx.Size(52, 21), style=0)
  • self.longueur = wx.TextCtrl(id=wxID_FRAME1LONGUEUR, name=u'longueur',
  • parent=self.panel1, pos=wx.Point(72, 88), size=wx.Size(48, 21),
  • style=0, value=u'800')
  • self.longueur.SetMaxLength(4)
  • self.staticLine1 = wx.StaticLine(id=wxID_FRAME1STATICLINE1,
  • name='staticLine1', parent=self.panel1, pos=wx.Point(8, 72),
  • size=wx.Size(376, 2), style=0)
  • self.staticText3 = wx.StaticText(id=wxID_FRAME1STATICTEXT3,
  • label=u'Hauteur : ', name='staticText3', parent=self.panel1,
  • pos=wx.Point(208, 92), size=wx.Size(49, 13), style=0)
  • self.hauteur = wx.TextCtrl(id=wxID_FRAME1HAUTEUR, name=u'hauteur',
  • parent=self.panel1, pos=wx.Point(272, 88), size=wx.Size(48, 21),
  • style=0, value=u'600')
  • self.hauteur.SetMaxLength(4)
  • self.redimensionner = wx.Button(id=wxID_FRAME1REDIMENSIONNER,
  • label=u'Redimensionner le dossier', name=u'redimensionner',
  • parent=self.panel1, pos=wx.Point(8, 160), size=wx.Size(136, 23),
  • style=0)
  • self.redimensionner.Bind(wx.EVT_BUTTON, self.OnRedimensionnerButton,
  • id=wxID_FRAME1REDIMENSIONNER)
  • self.staticLine2 = wx.StaticLine(id=wxID_FRAME1STATICLINE2,
  • name='staticLine2', parent=self.panel1, pos=wx.Point(184, 128),
  • size=wx.Size(1, 2), style=0)
  • self.staticLine3 = wx.StaticLine(id=wxID_FRAME1STATICLINE3,
  • name='staticLine3', parent=self.panel1, pos=wx.Point(8, 144),
  • size=wx.Size(376, 2), style=0)
  • self.status = wx.StaticText(id=wxID_FRAME1STATUS, label=u'',
  • name=u'status', parent=self.panel1, pos=wx.Point(32, 208),
  • size=wx.Size(0, 13), style=0)
  • def __init__(self, parent):
  • self._init_ctrls(parent)
  • def OnParcourirButton(self, event):
  • dialog = wx.DirDialog( None, message ='Sélectionnez le dossier à redimensionner:' )
  • # Show the dialog and get user input
  • if dialog.ShowModal() == wx.ID_OK:
  • self.chemin.SetValue(dialog.GetPath())
  • dialog.Destroy()
  • def OnRedimensionnerButton(self, event):
  • #Récupérer les parametres et utiliser la methode resizeFolder
  • erreur = False
  • if os.path.isdir(self.chemin.GetValue()):
  • folder = self.chemin.GetValue()
  • else:
  • erreur = True
  • self.status.SetLabel(str(self.chemin.GetValue())+" n'est pas un dossier")
  • if self.hauteur.GetValue().isdigit() and int(self.hauteur.GetValue()) >0 \
  • and int(self.hauteur.GetValue()) <= 2000:
  • hauteurimg = int(self.hauteur.GetValue())
  • else:
  • erreur = True
  • self.status.SetLabel("la hauteur n'est pas correcte.")
  • if self.longueur.GetValue().isdigit() and int(self.longueur.GetValue()) >0 \
  • and int(self.longueur.GetValue()) <= 2000:
  • largeurimg = int(self.longueur.GetValue())
  • else:
  • erreur = True
  • self.status.SetLabel("La longueur n'est pas correcte.")
  • if erreur == False:
  • self.status.SetLabel("Redimensionnement en cours...")
  • if resizeFolder(folder, hauteurimg, largeurimg):
  • self.status.SetLabel("Le dossier "+ str(folder)+" à été redimensionné.")
  • else:
  • self.status.SetLabel("Problème. Vérifiez qu'un dossier du même nom n'existe pas déja.")
  • #else:
  • # self.status.SetLabel("Erreur. Vérifiez vos paramètres de redimensionnement.")
  • class pyThumbs(wx.App):
  • def OnInit(self):
  • wx.InitAllImageHandlers()
  • self.main = create(None)
  • self.main.Show()
  • self.SetTopWindow(self.main)
  • return True
  • def main():
  • application = pyThumbs(0)
  • application.MainLoop()
  • if __name__ == '__main__':
  • main()
#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-

#pyThumbs - Auteur: JBJ

import wx, os, sys, glob, string, Image
import JpegImagePlugin

#import Frame1

#modules ={'Frame1': [1, 'Main frame of Application', u'Frame1.py']}

def create(parent):
    return Frame1(parent)

def resizeImage(image, hauteur, largeur, destination):
	try:
		img = Image.open(image).convert("RGB")
		img.thumbnail((hauteur,largeur), Image.ANTIALIAS)
		img.save(destination)
		return True

	except Error:
		return False
		
def resizeFolder(folder, hauteur, largeur):
	try:
		os.chdir(folder)
		os.mkdir("thumbs")
		compteur_img = 0
		for nom in glob.glob('*.jpg'):
			compteur_img+=1
			nomImage = os.path.join(folder,"thumbs", "Image"+`compteur_img`+".jpg")
			resizeImage(nom, hauteur, largeur, nomImage)
		
		return True

	except OSError:
		return False

[wxID_FRAME1, wxID_FRAME1CHEMIN, wxID_FRAME1HAUTEUR, wxID_FRAME1LONGUEUR, 
 wxID_FRAME1PANEL1, wxID_FRAME1PARCOURIR, wxID_FRAME1REDIMENSIONNER, 
 wxID_FRAME1STATICLINE1, wxID_FRAME1STATICLINE2, wxID_FRAME1STATICLINE3, 
 wxID_FRAME1STATICTEXT1, wxID_FRAME1STATICTEXT2, wxID_FRAME1STATICTEXT3, 
 wxID_FRAME1STATUS, wxID_FRAME1STATUSBAR1, 
] = [wx.NewId() for _init_ctrls in range(15)]

class Frame1(wx.Frame):
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Frame.__init__(self, id=wxID_FRAME1, name='', parent=prnt,
              pos=wx.Point(301, 152), size=wx.Size(400, 300),
              style=wx.DEFAULT_FRAME_STYLE, title=u'JBJ pyThumbs')
        self.SetClientSize(wx.Size(392, 266))

        self.statusBar1 = wx.StatusBar(id=wxID_FRAME1STATUSBAR1,
              name='statusBar1', parent=self, style=0)
        self.statusBar1.SetLabel(u'JBJ pyThumbs - 2006 Jean-Baptiste Jung')
        self.SetStatusBar(self.statusBar1)

        self.panel1 = wx.Panel(id=wxID_FRAME1PANEL1, name='panel1', parent=self,
              pos=wx.Point(0, 0), size=wx.Size(392, 243),
              style=wx.TAB_TRAVERSAL)

        self.staticText1 = wx.StaticText(id=wxID_FRAME1STATICTEXT1,
              label=u'Dossier \xe0 redimensionner :', name='staticText1',
              parent=self.panel1, pos=wx.Point(8, 16), size=wx.Size(127, 13),
              style=0)

        self.chemin = wx.TextCtrl(id=wxID_FRAME1CHEMIN, name=u'chemin',
              parent=self.panel1, pos=wx.Point(8, 40), size=wx.Size(256, 21),
              style=0, value=u'')

        self.parcourir = wx.Button(id=wxID_FRAME1PARCOURIR,
              label=u'Parcourir...', name=u'parcourir', parent=self.panel1,
              pos=wx.Point(288, 40), size=wx.Size(96, 23), style=0)
        self.parcourir.Bind(wx.EVT_BUTTON, self.OnParcourirButton,
              id=wxID_FRAME1PARCOURIR)

        self.staticText2 = wx.StaticText(id=wxID_FRAME1STATICTEXT2,
              label=u'Longueur :', name='staticText2', parent=self.panel1,
              pos=wx.Point(8, 92), size=wx.Size(52, 21), style=0)

        self.longueur = wx.TextCtrl(id=wxID_FRAME1LONGUEUR, name=u'longueur',
              parent=self.panel1, pos=wx.Point(72, 88), size=wx.Size(48, 21),
              style=0, value=u'800')
        self.longueur.SetMaxLength(4)

        self.staticLine1 = wx.StaticLine(id=wxID_FRAME1STATICLINE1,
              name='staticLine1', parent=self.panel1, pos=wx.Point(8, 72),
              size=wx.Size(376, 2), style=0)

        self.staticText3 = wx.StaticText(id=wxID_FRAME1STATICTEXT3,
              label=u'Hauteur : ', name='staticText3', parent=self.panel1,
              pos=wx.Point(208, 92), size=wx.Size(49, 13), style=0)

        self.hauteur = wx.TextCtrl(id=wxID_FRAME1HAUTEUR, name=u'hauteur',
              parent=self.panel1, pos=wx.Point(272, 88), size=wx.Size(48, 21),
              style=0, value=u'600')
        self.hauteur.SetMaxLength(4)

        self.redimensionner = wx.Button(id=wxID_FRAME1REDIMENSIONNER,
              label=u'Redimensionner le dossier', name=u'redimensionner',
              parent=self.panel1, pos=wx.Point(8, 160), size=wx.Size(136, 23),
              style=0)
        self.redimensionner.Bind(wx.EVT_BUTTON, self.OnRedimensionnerButton,
              id=wxID_FRAME1REDIMENSIONNER)

        self.staticLine2 = wx.StaticLine(id=wxID_FRAME1STATICLINE2,
              name='staticLine2', parent=self.panel1, pos=wx.Point(184, 128),
              size=wx.Size(1, 2), style=0)

        self.staticLine3 = wx.StaticLine(id=wxID_FRAME1STATICLINE3,
              name='staticLine3', parent=self.panel1, pos=wx.Point(8, 144),
              size=wx.Size(376, 2), style=0)

        self.status = wx.StaticText(id=wxID_FRAME1STATUS, label=u'',
              name=u'status', parent=self.panel1, pos=wx.Point(32, 208),
              size=wx.Size(0, 13), style=0)

    def __init__(self, parent):
        self._init_ctrls(parent)

    def OnParcourirButton(self, event):
        dialog = wx.DirDialog( None, message ='Sélectionnez le dossier à redimensionner:' )
	# Show the dialog and get user input
	
	if dialog.ShowModal() == wx.ID_OK:
		self.chemin.SetValue(dialog.GetPath())

	dialog.Destroy()

    def OnRedimensionnerButton(self, event):
        #Récupérer les parametres et utiliser la methode resizeFolder
	erreur = False
	if os.path.isdir(self.chemin.GetValue()):
		folder = self.chemin.GetValue()
	else:
		erreur = True
		self.status.SetLabel(str(self.chemin.GetValue())+" n'est pas un dossier")

	if self.hauteur.GetValue().isdigit() and int(self.hauteur.GetValue()) >0 \
	and int(self.hauteur.GetValue()) <= 2000:
		hauteurimg = int(self.hauteur.GetValue())
			
	else:
		erreur = True
		self.status.SetLabel("la hauteur n'est pas correcte.")

	if self.longueur.GetValue().isdigit() and int(self.longueur.GetValue()) >0 \
	and int(self.longueur.GetValue()) <= 2000:
		largeurimg = int(self.longueur.GetValue())
	
	else:
		erreur = True
		self.status.SetLabel("La longueur n'est pas correcte.")

	if erreur == False:
		self.status.SetLabel("Redimensionnement en cours...")
		if resizeFolder(folder, hauteurimg, largeurimg):
			self.status.SetLabel("Le dossier "+ str(folder)+" à été redimensionné.")

		else:
			self.status.SetLabel("Problème. Vérifiez qu'un dossier du même nom n'existe pas déja.")
	#else:
	#	self.status.SetLabel("Erreur. Vérifiez vos paramètres de redimensionnement.")

class pyThumbs(wx.App):
    def OnInit(self):
        wx.InitAllImageHandlers()
        self.main = create(None)
        self.main.Show()
        self.SetTopWindow(self.main)
        return True

def main():
    application = pyThumbs(0)
    application.MainLoop()

if __name__ == '__main__':
    main()



 Sources du même auteur

Source avec une capture RÉVEIL EN PYTHON

 Sources de la même categorie

Source avec Zip Source avec une capture JEU DE LA VIE SIMPLE ET GRAPHIQUE (TKINTER) EN PYTHON 3 par sodawil
Source avec Zip Source avec une capture PROGRAMMATION par grephit
Source avec Zip Source avec une capture EDITEUR DESSIN par grephit
Source avec Zip Source avec une capture PORTRAIT ROBOT par grephit
Source avec Zip ROTRING SCRIPT DESSIN par grephit

 Sources en rapport avec celle ci

Source avec une capture PHOTO SATELLITE AVEC ARCHIVAGE par saigneurdushi
STEGANOGRAPHIE par Marnage
Source avec Zip Source avec une capture REDIMENSIONNEMENT D'IMAGES par guillaume_pays_cevenol
Source avec Zip Source avec une capture NOMMEUR DE PHOTOS par vychnou
Source avec une capture DÉCOUPAGE DE BD par guillaume_pays_cevenol

Commentaires et avis

Commentaire de vychnou le 07/11/2006 10:26:03

Wahou, 181 lignes pour ça c'est un peu beaucoup, surtout quand on sait que le redimensionnement avec PIL prends environ 3 lignes de code. C'est le genre de traitements qui gagne à utiliser les arguments de la ligne de commande plutot qu'une interface graphique.
Par exemple: pyThumbs images/vacances -l 800 -h 600.
Tu pourrais aussi rajouter la gestion de la qualité de l'image à sauvegarder, quitte à vouloir gagner de la place autant permettre à l'utilisateur d'en gagner beaucoup. Lorsque tu sauvegarde l'image avec image.save, il suffit de rajouter un paramètre quality=qualité en pourcentage.


Dans l'ensemble c'est pas mal, le traitement à effecuter ressemble assez à celui de ma source:
http://www.pythonfrance.com/codes/ALBUMEUR-PHOTO-SCRIPT-CREATION-ALBUM-PHOTO-HTML-PARTIR_39943.aspx

Commentaire de jbjweb le 07/11/2006 13:03:08

Bien sûr qu'on peut faire moins de lignes en utilisant la ligne de commande, ou même Tkinter. Mais  je voulais profiter de ce script pour m'initier à Boa Constructor.
Quand à ton idée de la gestion de la qualité, je l'avais fait sur une précédente version du script (à l'époque en Java) mais je l'ai abandonnée sur cette version. Par contre je ne connaissait pas le parametre quality, merci.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Association d'image [ par DoudouBidou ] Bonjour, j'ai une application qui utilise Python (jusque l&#224; tout va bien) et wxPython je voudrais savoir s'il est possible (sans utiliser PIL) d Enregistrer une image [ par misteraoul ] Je suis d&#233;sol&#233; mais je ne trouve nul part comment faire pour enregistrer un caneva sous Tkinter en image bmp Est ce que c'est possible ? S modifier les metadonnées [ par airod ] Je cherche a etre mis sur la voie. Comment peut on editer les champs IPTC (m&#233;tadonn&#233;es) propre a une image? Faut il lire le fichier image c Importer une image dans Tkinter... [ par skools ] Bonjour à tous, Et pardon à ceux à qui j'ai envoyé des messages perso, je n'arrivais pas à poster un suget dans le forum... Voilà, après des heures d envoie d image sur le réseau [ par amina22 ] bonjour,je veux savoir si on peut envoyer  des fichiers (audio,vidéo,image..) a travers le réseau en utilisant la communication client/serveur(socket) Créer une image à partir d'un canvas [ par gaulthier ] Salut,comment peut-on créer une image (jpg de préférence) a partir du contenu d'un canvas?J'utilise PIL.Merci d'avance pour vos réponses! Pop-up personnalisé [ par Lacro59 ] Bonjour, En regardant un peu les différentes documentations sur wx.TaskBarIcon et wx.Menu pour la création d'un menu pop-up, je me demandais si :- il Cacher une image [ par akkuciha ] Bonjour à tous, Le but de mon application est de trouver l'image "Question" parmis les images "réponses" possibles.J'ai une zone d'image faite avec gl chargement d'une image [ par panthere007 ] Hellohello je voudrai mettre une image de fond dans une fenêtre (caneva ?) pour ensuite placer mes control par dessus j'ai pas mal chercher mai on dir Tkinter et changment d'image [ par vega95 ] Bonjour,j'ai écrit le code suivant pour afficher une image à l'accueil en attendant le début du programme. Une fois le bouton b1 enfoncé, je voudrais


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,842 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales