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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    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
    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
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    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
    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 Expert 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 : 60
    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
    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
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    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
    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 Expert 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 : 60
    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
    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
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    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
    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)

+ 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