Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

ASP.NET - COMMENT CRÉER UNE IMAGE DE TAILLE PLUS RÉDUITE EN CONSERVANT LA QUALITÉ MAXIMUM


Information sur la source

Catégorie :Graphique Source .NET ( DotNet ) Classé sous : proportion, image, picture, réduire, conserver Niveau : Débutant Date de création : 04/05/2004 Vu : 13 254

Note :
10 / 10 - par 3 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note


Description

A partir de l'idée de la source :
- http://www.aspfr.com/code.aspx?ID=9088

et de la classe proposée par Mário Sobral :
- http://www.aranhix.net/foruns/ShowPost.aspx?PostID=41

J'ai simplement créé une procédure qui génère une image d'une largeur fixée (avec la hauteur respectant le rapport original) en conservant la qualité maximale. Le but de ma fonction est de réduire la taille de l'image donc l'image de la nouvelle taille remplace l'ancienne.
 

Source

  • ' -----------------------------------------------------
  • Private Sub ResizeImage(ByVal CheminFichier As String, ByVal CheminFichierTemp As String, ByVal LargeurPrevue As Integer)
  • Dim LargeurMiniature As Integer = LargeurPrevue 'On fixe la hauteur de l'image
  • Dim HauteurMiniature As Integer = 0 'la Hauteur sera calculée
  • Dim BMPTemp As System.Drawing.Bitmap
  • Dim graphicTemp As System.Drawing.Graphics
  • File.Copy(CheminFichier, CheminFichierTemp, True)
  • File.Delete(CheminFichier)
  • Dim bmp As New System.Drawing.Bitmap(CheminFichierTemp)
  • HauteurMiniature = (bmp.Size.Height * LargeurMiniature / bmp.Size.Width)
  • BMPTemp = New System.Drawing.Bitmap(LargeurMiniature, HauteurMiniature)
  • graphicTemp = System.Drawing.Graphics.FromImage(BMPTemp)
  • graphicTemp.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceOver
  • graphicTemp.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality
  • graphicTemp.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality
  • graphicTemp.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic
  • graphicTemp.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality
  • graphicTemp.DrawImage(bmp, 0, 0, LargeurMiniature, HauteurMiniature)
  • graphicTemp.Dispose()
  • BMPTemp.Save(CheminFichier, System.Drawing.Imaging.ImageFormat.Jpeg)
  • BMPTemp.Dispose()
  • bmp.Dispose()
  • File.Delete(CheminFichierTemp)
  • End Sub
  • ' -----------------------------------------------------
' -----------------------------------------------------
Private Sub ResizeImage(ByVal CheminFichier As String, ByVal CheminFichierTemp As String, ByVal LargeurPrevue As Integer)
 Dim LargeurMiniature As Integer = LargeurPrevue 'On fixe la hauteur de l'image
 Dim HauteurMiniature As Integer = 0 'la Hauteur sera calculée
 Dim BMPTemp As System.Drawing.Bitmap
 Dim graphicTemp As System.Drawing.Graphics

 File.Copy(CheminFichier, CheminFichierTemp, True)
 File.Delete(CheminFichier)

 Dim bmp As New System.Drawing.Bitmap(CheminFichierTemp)
 HauteurMiniature = (bmp.Size.Height * LargeurMiniature / bmp.Size.Width)

 BMPTemp = New System.Drawing.Bitmap(LargeurMiniature, HauteurMiniature)
 graphicTemp = System.Drawing.Graphics.FromImage(BMPTemp)

 graphicTemp.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceOver
 graphicTemp.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality
 graphicTemp.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality
 graphicTemp.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic
 graphicTemp.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality

 graphicTemp.DrawImage(bmp, 0, 0, LargeurMiniature, HauteurMiniature)
 graphicTemp.Dispose()

 BMPTemp.Save(CheminFichier, System.Drawing.Imaging.ImageFormat.Jpeg)
 BMPTemp.Dispose()
 bmp.Dispose()
 File.Delete(CheminFichierTemp)

End Sub

' -----------------------------------------------------

Conclusion

Bon Coding.

Romelard Fabrice (Alias F___)
 

Commentaires et avis

signaler à un administrateur
Commentaire de jesusonline le 04/05/2004 20:48:58 administrateur CS

oui pas mal
Cependant dans certains cas ce n'est pas la largeur qu'on fixe mais la hauteur.
Pour permettre de fixer la hauteur on pourrait alors faire un truc de ce style :

    Public Sub ResizeImage(ByVal CheminFichier As String, ByVal CheminFichierTemp As String, ByVal LargeurPrevue As Integer)
        If LargeurPrevue = 0 Then Throw New Exception("0 interdit !!!") : Exit Sub
        ResizeImage(CheminFichier, CheminFichierTemp, LargeurPrevue, 0)
    End Sub
    Public Sub ResizeImage(ByVal CheminFichier As String, ByVal CheminFichierTemp As String, ByVal LargeurPrevue As Integer, ByVal HauteurPrevue As Integer)
        If LargeurPrevue = 0 And HauteurPrevue = 0 Then Throw New Exception("0 interdit !!!") : Exit Sub

        Try
            Dim LargeurMiniature As Integer = LargeurPrevue 'On fixe la largeur de l'image
            Dim HauteurMiniature As Integer = HauteurPrevue 'On fixe la hauteur de l'image

            Dim BMPTemp As System.Drawing.Bitmap
            Dim graphicTemp As System.Drawing.Graphics

            File.Copy(CheminFichier, CheminFichierTemp, True)
            File.Delete(CheminFichier)

            Dim bmp As New System.Drawing.Bitmap(CheminFichierTemp)

            If HauteurMiniature = 0 Then
                HauteurMiniature = (bmp.Size.Height * LargeurMiniature / bmp.Size.Width)
            End If

            If LargeurMiniature = 0 Then
                LargeurMiniature = (bmp.Size.Width * HauteurMiniature / bmp.Size.Height)
            End If

            BMPTemp = New System.Drawing.Bitmap(LargeurMiniature, HauteurMiniature)
            graphicTemp = System.Drawing.Graphics.FromImage(BMPTemp)

            graphicTemp.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceOver
            graphicTemp.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality
            graphicTemp.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality
            graphicTemp.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic
            graphicTemp.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality

            graphicTemp.DrawImage(bmp, 0, 0, LargeurMiniature, HauteurMiniature)
            graphicTemp.Dispose()

            BMPTemp.Save(CheminFichier, System.Drawing.Imaging.ImageFormat.Jpeg)
            BMPTemp.Dispose()
            bmp.Dispose()
            File.Delete(CheminFichierTemp)

        Catch ex As Exception
            Throw New Exception(ex.Message)
        End Try

    End Sub

Ce bout de code permet de garder la compatibilité avec celui ci dessus  et offre une hyper rapide gestion d'erreur :)

signaler à un administrateur
Commentaire de jcq le 09/07/2004 14:26:00

je trouve ça trés bon comme code, même si je n'ai pas tout compris(enfin je pense mais suis pas sur, je connais pas bien l'artecture .net).

signaler à un administrateur
Commentaire de tmcuh le 25/02/2005 11:59:46

humm interressant quand on doit mettre des petites images à agrandir, mais la quantité à downloader reste la meme non?

signaler à un administrateur
Commentaire de jesusonline le 25/02/2005 13:02:18 administrateur CS

Le but est justement de réduire la taille donc on telecharge vraiment des images de petites dimensions :)

signaler à un administrateur
Commentaire de ja001net le 01/08/2006 11:55:11

Bonjour,

J'utilise cette méthode pour créer des images réduites à partir d'images plus grandes ;)
Cependant, la qualité des images réduites n'est vraiment pas bonne et les images sont très "pixelisées". La résolution des images source est de 300 dpi alors que la résolution des images créées est de 96 dpi. Y'a t'il un moyen de spécifier la résolution de sortie pour les miniatures ?

Merci d'avance.

signaler à un administrateur
Commentaire de Nightcourrier le 28/02/2008 03:49:42 10/10


Wow !!!

Beau travail et Merci ! :)

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Comment creer un forum ?? [ par pekinio ] Ben voila, je ne parle pas du tout asp, pour l'instant, et donc je suis un pur nul.c pour cela que j aimerais que quelqun me dise comment creer des se Comment mettre comme image une page ASP ? [ par Clem ] Comment mettre comme image une page ASP ? (ex : <img src="compt.asp?id=512"> qui remplacera une image de compteur de visiteurs) Appel d'une function à partir d'une image [ par Wassup ] j'aimerais en cliquant sur une image appeller une function en passant un paramêtre, du style :ouvrepopavec(fichier.htm)J'ai essayé les événements1)&lt Appel d'une fonction à partir d'une image [ par Wassup ] j'aimerais en cliquant sur une image appeller une function en passant un paramêtre, du style :ouvrepopavec(fichier.htm)J'ai essayé les événements1)&lt Afficher une image d'une base de données sur une page web [ par jimini ] Est-ce que quelqu'un sait comment afficher une image provenant d'une table ? J'aimerais enregistrer une image par ligne dans ma base de données. Tout Pb avec image pour submit [ par franzioz ] (une réponse)Hello,J'ai un petit pb car je veux mettre une image a la place d'un bouton pour envoyer mes donnes d'un formulaire. Le probleme est que j java et jpg [ par Troyan ] Bonjour a tous voila je recherche un java qui permette. de prendre une image jpg de la retailler et de la sauver en jpg. genre faire une vignette de l Comment inserer une image ou un fichier dans une base Access ? [ par langju ] Bonjour à tous,voilà j'ecris pour un petit problème :Sur une page ASP j'ai crée un formulaire avec un FileUpload(champ de fichier.) ma balise form est conserver [ par fseb ] Bonjour, j'ai deux doubles listes, dont le contenu de la deuxieme est issue du choix de la premiere (bd access), mais lorqsuqe je recharge ma page, le image [ par pitxun ] j'aimerais savoir comment il faut faire pour connaître les dimensions d'une image.j'aimerais connaître la commande et sa syntaxe.


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,484 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.