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

ASP.NET Discussion :

réduction photos après upload


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 163
    Par défaut réduction photos après upload
    Bonjour,


    j'ai utilisé un code trouvé sur internet qui me permet de réduire la taille d'une photo jpg. Cependant lors du redimensionnement ma photo est complètement transformés. elle n'a plus rien a voir avec la photo d'origine.

    ya t-il un autre moyen de redimensionné une photo.

    voici le code que j'utilise :

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
     // ********************* upload de la photo du porduit ********************
        private string UploadPhoto(string RefProd, int id_FamilleProd, string CoupCoeur)
        {
            string photo = this.FileUploadProd.FileName;
            string photoARedim = "";
            string chemin = "";
            if (photo != "") {
                photo = RefProd;
                // enregistrement de la photo dans le repertoire appproprié
                switch (id_FamilleProd)
                {
                        // accessoires
                    case 1 :
                        chemin = "../images/photos/accessoires/";
                        this.FileUploadProd.SaveAs(Server.MapPath(chemin + photo + ".jpg"));
                        break;
     
                        // prêt à porter
                    case 2 :
                        chemin = "../images/photos/pretsaporter/";
                        this.FileUploadProd.SaveAs(Server.MapPath(chemin + photo + ".jpg"));
                        break;
     
                        // bijoux
                    case 3 :
                        chemin = "../images/photos/bijoux/";
                        this.FileUploadProd.SaveAs(Server.MapPath(chemin + photo + ".jpg"));
                        break;
                }
     
            try{
                // redimensionnement de la photo
                photoARedim = chemin + photo;
     
                int imageWidth1 = 0;
                int imageHeight1 = 0;
     
                imageWidth1 = 500;
                imageHeight1 = 600;
     
                System.Drawing.Image fullSizeImg =  System.Drawing.Image.FromFile(Server.MapPath(photoARedim));
                int hautInit = fullSizeImg.Height;
                int LargInit = fullSizeImg.Width;
     
                System.Drawing.Image.GetThumbnailImageAbort dCallBacl =
                    new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallBack);
     
                // si l'image initiale est plus grandes que les tailles voulues
                if (LargInit > imageWidth1 && hautInit > imageHeight1)
                {
                    System.Drawing.Image thumbnailImg1 = fullSizeImg.GetThumbnailImage(imageWidth1, imageHeight1, dCallBacl, IntPtr.Zero);
     
                    // met m'image au format jpg
                    thumbnailImg1.Save(Server.MapPath(photoARedim) + ".jpg", ImageFormat.Jpeg);
                    thumbnailImg1.Dispose();
                    fullSizeImg.Dispose();
                }
                // si la largeur initiale uniquement est supérieure à celle souhaitée
                else if (LargInit > imageWidth1 && hautInit <= imageHeight1)
                {
                    System.Drawing.Image thumbnailImg1 = fullSizeImg.GetThumbnailImage(imageWidth1, hautInit, dCallBacl, IntPtr.Zero);
     
                    // met m'image au format jpg
                    thumbnailImg1.Save(Server.MapPath(photoARedim) + ".jpg", ImageFormat.Jpeg);
                    thumbnailImg1.Dispose();
                    fullSizeImg.Dispose();
                }
                // si la hauteur uniquement est supérieur à celle souhaitée
                else if (LargInit <= imageWidth1 && hautInit > imageHeight1)
                {
                    System.Drawing.Image thumbnailImg1 = fullSizeImg.GetThumbnailImage(LargInit, imageHeight1, dCallBacl, IntPtr.Zero);
     
                    // met m'image au format jpg
                    thumbnailImg1.Save(Server.MapPath(photoARedim) + ".jpg", ImageFormat.Jpeg);
                    thumbnailImg1.Dispose();
                    fullSizeImg.Dispose();
                }
                // si l'image initiale est plus petite ou égale aux tailles souhaitée
                else if (LargInit <= imageWidth1 && hautInit <= imageHeight1)
                {
                    System.Drawing.Image thumbnailImg1 = fullSizeImg.GetThumbnailImage(LargInit, hautInit, dCallBacl, IntPtr.Zero);
     
                    // met m'image au format jpg
                    thumbnailImg1.Save(Server.MapPath(photoARedim) + ".jpg", ImageFormat.Jpeg);
                    thumbnailImg1.Dispose();
                    fullSizeImg.Dispose();
                }
     
                // on efface ensuite la photo d'origine
                if (File.Exists(Server.MapPath(photoARedim)))
                    File.Delete(Server.MapPath(photoARedim));
            }
            catch (Exception ex) { throw new Exception (ex.Message); }
            }
     
            return photoARedim.Substring(photoARedim.IndexOf('/')+1) + ".jpg";
        }
    en sachant qu'au départ les photos font 2Mo soit 2600x3500 de dimensions et que moi je les réduis en 500x600, car le but c'est qu'elles fasse a peu près 30 ko ou moins

    Je pense que le problème vient quand j'enregistra ma nouvelle photo sur le serveur.

    soit dans cette partie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     // met m'image au format jpg
                    thumbnailImg1.Save(Server.MapPath(photoARedim) + ".jpg", ImageFormat.Jpeg);
    si quelqu'un veut bien m'aider se serait sympa

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Quand tu dis "transformée", tu veux dire déformée ? ou c'est carrément un truc qui ne ressemble même pas à l'original ?

    De toute façon, GetThumbnailImage n'est utilisable que pour des petites miniatures. Dès que tu veux monter un peu en résolution, la qualité est insuffisante.

    Personnellement, pour redimensionner une photo à une taille maximale, j'utilise ce code, qui conserve une qualité correcte en réduisant pas mal la taille du fichier.

    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
            private Image ResizePhotoIfNecessary(Image image, int maxWidth, int maxHeight)
            {
                if (image.Width > maxWidth || image.Height > maxHeight)
                {
                    double rx = (double)maxWidth / image.Width;
                    double ry = (double)maxHeight / image.Height;
                    double r = Math.Min(rx, ry);
                    int w = (int)(image.Width * r);
                    int h = (int)(image.Height * r);
                    Image resized = ResizeImage(image, w, h);
                    return resized;
                }
                else
                    return new Bitmap(image);
            }
     
            private Image ResizeImage(Image image, int w, int h)
            {
                Bitmap bmp = new Bitmap(w, h, image.PixelFormat);
                bmp.SetResolution(image.HorizontalResolution, image.VerticalResolution);
                Graphics g = Graphics.FromImage(bmp);
                g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBilinear;
                g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
                g.DrawImage(
                    image,
                    new Rectangle(0, 0, w, h),
                    new Rectangle(0, 0, image.Width, image.Height),
                    GraphicsUnit.Pixel);
     
                g.Dispose();
                return bmp;
            }

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 163
    Par défaut
    ben quand je dis déformée ça veut dire qu'elle ne ressemble preske plus a l'original

    je vais essayer ton code

    merci

  4. #4
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 47
    Par défaut
    Bonjour

    J'ai eu le meme soucis que toi. J'ai utilisé la librairie ImageMagick.

    Elle redimenssionne l'image en respectant l'homotéthie de l'image.

    http://midimick.com/magicknet/

    Si tu a des questions sur la librairie n'hésite pas.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 163
    Par défaut
    j'ai essayé ton code tomlev j'obtiens une photo avec une taille et un poids raisonnable mais malheureusement elle est toute noire.

    je n'arrive pas a comrpendre pourquoi

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par realkilla Voir le message
    j'ai essayé ton code tomlev j'obtiens une photo avec une taille et un poids raisonnable mais malheureusement elle est toute noire.
    Ah ? bizarre, j'utilise ça dans une appli en production, et si ça faisait une image toute noire ça aurait ralé...

    Tu enregistres comment l'image après ? Moi je l'enregistre avec le format Image.Jpeg

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 163
    Par défaut
    Citation Envoyé par Ruddy Voir le message
    Bonjour

    J'ai eu le meme soucis que toi. J'ai utilisé la librairie ImageMagick.

    Elle redimenssionne l'image en respectant l'homotéthie de l'image.

    http://midimick.com/magicknet/

    Si tu a des questions sur la librairie n'hésite pas.
    ok merci je regarde ça

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

Discussions similaires

  1. [Upload] Mauvais nom de fichier apres upload
    Par chambiges dans le forum Langage
    Réponses: 2
    Dernier message: 29/07/2007, 21h28
  2. [Upload] Redimensionner une image après upload
    Par putubudiarta dans le forum Langage
    Réponses: 2
    Dernier message: 14/01/2007, 12h32
  3. [Upload] Fichier interdit d'accès après upload
    Par Bisûnûrs dans le forum Langage
    Réponses: 2
    Dernier message: 31/03/2006, 00h33
  4. [Upload] Insertion image dans mysql après upload
    Par alexmorel dans le forum Langage
    Réponses: 4
    Dernier message: 20/03/2006, 23h46
  5. Réponses: 2
    Dernier message: 27/02/2006, 10h18

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