IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Script pour resize picture


Sujet :

Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Janvier 2015
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Script pour resize picture
    Bonjour a tous et a toutes !

    Étant novice en python je viens chercher un peu d'aide de la communauté
    Je cherche Donc à faire un script python pour resize une image via interface web qui s'adapte en fonction de l'url que je configurai dans le Vhost d'apache (scriptpython.py?src=%{REQUEST_URI})
    ainsi l'url demandé correspondra a [src]


    pour débuter je suis partis sur une variable fixe et qui devrais correspondre le type d'url taper

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    !/usr/bin/python
     
    str = "http://blalbal.lololo.com/thb/GTA/FR/DNE/240/214/panda.jpg";
    para_src=str[:-4]
    ext=str[-4:]
    print para_src			        #['http:', '', 'blalba.lolol.com', 'thb', 'GTA', 'FR', 'DNE', '240', '214', 'panda']
    print ext				#.jpg
    dir=para_src.split("/")
    print dir				#['http:', '', 'blalbla.lolol.com', 'thb', 'GTA', 'FR', 'DNE', '240', '214', 'panda']
    dirpath="" 
    print dirpath				#
    					#214
    tab=dir[-3:]
    print tab				#['240', '214', 'panda']
    ce que j'aimerais faire c'est donc utilisé le 240 et le 214 comme valeur pour resize une image la mettre dans un cache (var/www/cache) et afficher l'image a partir du cache donc il y'aurais a faire un if image_name pas dans cache la généré dans le cache ifelse image_name dans cache l'afficher

    je tiens préciser que j'ai très peu de notion en prog.

    Merci d'avance toi personne qui me répondra !

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Janvier 2015
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    J'ai continué un peu mais j'ai un problème avec mon code :
    File "./test2.py", line 36, in <module>
    image = Image.open(chemin).resize( (width,height) )
    File "/usr/lib/python2.7/dist-packages/PIL/Image.py", line 1334, in resize
    im = self.im.resize(size, resample)
    TypeError: an integer is required

    je ne sais pas comment inclure le résultat de hight = dir[-3] pour resize mon image



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    #!/usr/bin/python
    from PIL import Image
    import os
     
    str = "http://blalbal.lololo.com/img/240/214/toto.jpg";
    para_src=str[:-4]
    ext=str[-4:]
    print para_src				#http://blalbal.lololo.com/img/240/214/toto
    print ext				#.jpg
     
    dir=para_src.split("/")
    print dir				#['http:', '', 'blalbal.lololo.com', 'img', '240', '214', 'toto']
     
    dirpath="" 
    print dirpath				#
     
    for i in range(len(dir)-4):
           dirpath=dir[i+1]+"/"
    print dirpath				#img/
     
    tab=dir[-3:]
    print tab				#['240', '214', 'toto']
     
    tal=dir[:-3]
    print tal				#['http:', '', 'blalbal.lololo.com', 'img']
     
    imagename=dir[-1]
    print imagename				#toto
     
    chemin="/var/www/"+dirpath+imagename+ext
    print chemin				#/var/www/img/toto.jpg
    height=dir[-2] 
    print height
    width=dir[-3]
    print width
    image = Image.open(chemin).resize( (width,height) )
    image = image.resize( (width,height), Image.ANTIALIAS)
    image.show()

  3. #3
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    Bonjour

    Citation Envoyé par remi_adm Voir le message
    File "./test2.py", line 36, in <module>
    image = Image.open(chemin).resize( (width,height) )
    File "/usr/lib/python2.7/dist-packages/PIL/Image.py", line 1334, in resize
    im = self.im.resize(size, resample)
    TypeError: an integer is required

    je ne sais pas comment inclure le résultat de hight = dir[-3] pour resize mon image

    Partout tu manipules des chaines de caractères. Utilise height= int(dir[-2]) et width=int(dir[-3]) pour obtenir des entiers que tu pourras ensuite utiliser dans le resize.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Janvier 2015
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Merci plxpy pour l'aide !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    #!/usr/bin/python
     
    from PIL import Image
    from os import path
    import os
     
    CACHE_PATH="/var/www/testcache/"
    str = "http://blalbal.lololo.com/img/800/800/toto.jpg";
    para_src=str[:-4]
    ext=str[-4:]
    print para_src				#http://blalbal.lololo.com/img/240/214/toto
    print ext				#.jpg
     
    dir=para_src.split("/")
    print dir				#['http:', '', 'blalbal.lololo.com', 'img', '240', '214', 'toto']
     
    dirpath="" 
    print dirpath				#
     
    dirpath=dir[+3]+"/"
    print dirpath				#img/
     
    tab=dir[-3:]
    print tab				#['240', '214', 'toto']
     
    tal=dir[:-3]
    print tal				#['http:', '', 'blalbal.lololo.com', 'img']
     
    imagename=dir[-1]
    print imagename				#toto
     
    chemin="/var/www/"+dirpath+imagename+ext
    print chemin				#/var/www/img/toto.jpg
     
    height=int(dir[-2])
    width=int(dir[-3])
     
    if tab[-2].isdigit() == True and tab[-3].isdigit() == True:
    	if path.exists(CACHE_PATH+dirpath+imagename+"_"+dir[-2]+"_"+dir[-3]+ext):
    		chemin=CACHE_PATH+dirpath+imagename+"_"+dir[-2]+"_"+dir[-3]+ext
    		image=Image.open(chemin)
    		image.show()
    	else:
    		if not path.exists(CACHE_PATH+dirpath+imagename+"_"+dir[-2]+"_"+dir[-3]+ext):
    			image = Image.open(chemin).resize( (width,height) )
    		image = image.resize( (width,height), Image.ANTIALIAS)
    		image.save (???)
    Mon code marche a part que je ne sais pas quel syntaxe mettre dans image.save (dernière ligne) pour sauvegarder mon image dans le cache, une proposition ?

  5. #5
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    Citation Envoyé par remi_adm Voir le message
    Mon code marche a part que je ne sais pas quel syntaxe mettre dans image.save (dernière ligne) pour sauvegarder mon image dans le cache, une proposition ?
    De mémoire, le chemin du fichier où tu souhaites écrire l'image redimensionée. Si l'extension est "standard", il me semble que l'on n'a même pas à préciser le format image.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Janvier 2015
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Alors mon script est enfin "fonctionnel" pour cela il faut disposer d'une image toto.pnj dans /var/www/img/ crée une fichier (avec les droit approprié) dans /var/www/testcache/img/

    Pour modifier la taille de l'image on change les valeurs dans str = 100 et 800 par exemple : génère l'image dans le cache et l'ouvre



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    #!/usr/bin/python
     
    from PIL import Image
    from os import path
    import os
     
    CACHE_PATH="/var/www/testcache/"
    str = "blalbal.lololo.com/img/100/800/toto.jpg";
    para_src=str[:-4]
    ext=str[-4:]
    print para_src				#http://blalbal.lololo.com/img/240/214/toto
    print ext				#.jpg
     
    dir=para_src.split("/")
    print dir				#['http:', '', 'blalbal.lololo.com', 'img', '240', '214', 'toto']
     
    dirpath="" 
    print dirpath				#
     
    dirpath=dir[+1]+"/"
    print dirpath				#img/
     
    tab=dir[-3:]
    print tab				#['240', '214', 'toto']
     
    tal=dir[:-3]
    print tal				#['http:', '', 'blalbal.lololo.com', 'img']
     
    imagename=dir[-1]
    print imagename				#toto
     
    chemin="/var/www/"+dirpath+imagename+ext
    print chemin				#/var/www/img/toto.jpg
     
    height=int(dir[-2])
    width=int(dir[-3])
     
    if tab[-2].isdigit() == True and tab[-3].isdigit() == True:
    	if path.exists(CACHE_PATH+dirpath+imagename+"_"+dir[-2]+"_"+dir[-3]+ext):
    		chemin=CACHE_PATH+dirpath+imagename+"_"+dir[-2]+"_"+dir[-3]+ext
    		image=Image.open(chemin)
    		image.show()
    	else:
    		if not path.exists(CACHE_PATH+dirpath+imagename+"_"+dir[-2]+"_"+dir[-3]+ext):
    			image = Image.open(chemin).resize( (width,height) )
    		image = image.resize( (width,height), Image.ANTIALIAS)
    		image.save (CACHE_PATH+dirpath+imagename+"_"+dir[-2]+"_"+dir[-3]+ext)
    J'en arrive a la derniere partie maintenant j'ai crée le Vhost et modifié mon script en conséquence et activé les mod_python pour apache je tape l'url blalbal.lolo/img/200/300/toto.jpg le script se lance bien mais j'ai comme erreur :

    File "/usr/lib/python2.7/dist-packages/mod_python/importer.py", line 1537, in HandlerDispatch
    default=default_handler, arg=req, silent=hlist.silent)

    File "/usr/lib/python2.7/dist-packages/mod_python/importer.py", line 1229, in _process_target
    result = _execute_target(config, req, object, arg)

    File "/usr/lib/python2.7/dist-packages/mod_python/importer.py", line 1155, in _execute_target
    assert (type(result) == types.IntType), _result_warning % type(result)

    AssertionError: Handler has returned result or raised SERVER_RETURN
    exception with argument having non integer type. Type of value returned
    was <type 'NoneType'>, whereas expected <type 'int'>.

    Pourquoi cette erreur alors que en local j'ai pas de problème ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    # -*- coding: utf-8 -*-
     
    from mod_python import apache
    from PIL import Image
    from os import path
    from mod_python import util
    import os
     
    CACHE_PATH="/var/www/testcache/"
    def handler(req):
            parameters = util.FieldStorage(req)
     #"http://blalbal.lololo.com/img/100/800/toto.jpg"
            param_src=parameters["src"][:-4] #-4 pour virer le .jpg /thb/GTA/FR/DNE/panda_240_214
            ext=parameters["src"][-4:]
            print param_src                         #http://blalbal.lololo.com/img/240/214/toto
            print ext                               #.jpg
     
            dir=param_src.split("/")
            print dir                               #['http:', '', 'blalbal.lololo.com', 'img', '240', '214', 'toto']
     
            dirpath=""
            print dirpath                           #
     
            dirpath=dir[+1]+"/"
            print dirpath                           #img/
     
            tab=dir[-3:]
            print tab                               #['240', '214', 'toto']
     
            tal=dir[:-3]
            print tal                               #['http:', '', 'blalbal.lololo.com', 'img']
     
            imagename=dir[-1]
            print imagename                         #toto
     
            chemin="/var/www/"+dirpath+imagename+ext
            print chemin                            #/var/www/img/toto.jpg
     
            height=int(dir[-2])
            width=int(dir[-3])
     
            if tab[-2].isdigit() == True and tab[-3].isdigit() == True:
                    if path.exists(CACHE_PATH+dirpath+imagename+"_"+dir[-2]+"_"+dir[-3]+ext):
                            chemin=CACHE_PATH+dirpath+imagename+"_"+dir[-2]+"_"+dir[-3]+ext
                            image=Image.open(chemin)
                            image.show()
                    else:
                            if not path.exists(CACHE_PATH+dirpath+imagename+"_"+dir[-2]+"_"+dir[-3]+ext):
                                    image = Image.open(chemin).resize( (width,height) )
                            image = image.resize( (width,height), Image.ANTIALIAS)
                            image.save (CACHE_PATH+dirpath+imagename+"_"+dir[-2]+"_"+dir[-3]+ext)

  7. #7
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    Euh ... avant de poursuivre (je pensais que c'était une manip "coin de table", vite fait, ... fait), une petite mise au propre ne serait pas de trop : ton code est vraiment - désolé - crade de chez crade !

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Janvier 2015
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    pas de soucis vu que c'est la première fois que je code j'ai pas cette notion de propre ou sale =S, donc je sais pas comment organiser les choses...

    pour moi il était tout beau

    Je pense que personne pour m'aider je classe sans en résolu

    bye et merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Script pour back up database
    Par jeff37 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 06/09/2004, 15h57
  2. script pour ajouter des utilisateurs postgres
    Par xopos dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 16/08/2004, 10h49
  3. [langage] cherche script pour formater une chaine
    Par MASSAKA dans le forum Langage
    Réponses: 7
    Dernier message: 12/11/2003, 12h18
  4. [pgaccess] Script pour formulaire
    Par garou51 dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 13/06/2003, 08h30
  5. Script pour envoyer des info a mysql
    Par rhum1 dans le forum Linux
    Réponses: 6
    Dernier message: 15/04/2003, 16h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo