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 GÉNÉRER UNE MINIATURE CONFORME À UN FICHIER IMAGE INITIAL


Information sur la source

Catégorie :Graphique Source .NET ( DotNet ) Niveau : Débutant Date de création : 03/09/2003 Date de mise à jour : 26/10/2003 22:31:59 Vu : 12 437

Note :
9,33 / 10 - par 3 personnes
9,33 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

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


Description

Dans des projet WEB, souvent on tombe sur une gestion des Images à faire, que ce soit pour un annuaire, un catalogue, etc. ...

Ainsi, la création de miniature est souvent un gain pour l'utilisateur Final (client WEB) qui ne télécharge que les miniature et si la miniature lui plait il va alors chercher l'image à la taille réelle.

Mais pour les gestionnaire du site, il est pénible de générer et d'uploader 2 images (Miniature et taille réelle), de ce fait, la génération par le Framework de cette miniature est une solution à exploiter dans ce cas de figure.

Voila donc simplement comment faire.
 

Source

  • ' On va fournir une image avec une hauteur et Largeur X et Y, et fixer la largeur de la miniature (en pixel),
  • ' la hauteur de la miniature se calcule alors en proportion
  • Dim MonRepertoirePhysique as string = "C:\MoRepertoireImage\"
  • Dim MonFichierImage as string = "MonImage.jpg"
  • Dim MonFichierMiniature as string = "MonImageMiniature.jpg"
  • Dim LargeurMiniature As Integer = 100 'On fixe la hauteur de l'image
  • Dim HauteurMiniature As Integer = 0 'la Hauteur sera calculée
  • Dim bmp As New System.Drawing.Bitmap(MonRepertoirePhysique & MonFichierImage)
  • HauteurMiniature = (bmp.Size.Height * LargeurMiniature / bmp.Size.Width)
  • bmp = bmp.GetThumbnailImage(LargeurMiniature, HauteurMiniature, AddressOf CallBackAbort, IntPtr.Zero)
  • bmp.Save(MonRepertoirePhysique & MonFichierMiniature, System.Drawing.Imaging.ImageFormat.Jpeg)
  • bmp.Dispose()
' On va fournir une image avec une hauteur et Largeur X et Y, et fixer la largeur de la miniature (en pixel), 
' la hauteur de la miniature se calcule alors en proportion

Dim MonRepertoirePhysique as string = "C:\MoRepertoireImage\"
Dim MonFichierImage as string = "MonImage.jpg"
Dim MonFichierMiniature as string = "MonImageMiniature.jpg"
Dim LargeurMiniature As Integer = 100 'On fixe la hauteur de l'image
Dim HauteurMiniature As Integer = 0 'la Hauteur sera calculée

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

bmp = bmp.GetThumbnailImage(LargeurMiniature, HauteurMiniature, AddressOf CallBackAbort, IntPtr.Zero)
bmp.Save(MonRepertoirePhysique & MonFichierMiniature, System.Drawing.Imaging.ImageFormat.Jpeg)
bmp.Dispose()

Conclusion

La Classe System.Drawing possède de très nombreuses possibilités et la génération de miniature n'est qu'un petit aprecu.

Bon coding.

-----------------------------------

[Article cité sur le Flash Microsoft MSDN France] :
http://www.microsoft.com/france/msdn/abonnements/flash/archives/030922.html

-----------------------------------

Romelard Fabrice (Alias F___)
 

Commentaires et avis

signaler à un administrateur
Commentaire de jesusonline le 04/09/2003 19:03:59 administrateur CS

Ta source est bien est très simple :)

Mais la methode GetThumbnailImage d'apres c2i.fr fait des images de moyenne qualité

Il est donc preferable d'utiliser la methode decrite dans cette page : http://www.c2i.fr/code.aspx?IDCode=503 qui en plus permet de controler la compression du jpeg
mais le code devient beaucoup plus complexe, et je n'ai pas fait de test poussé sur les differentes methodes pour comparer la qualité et le poid, j'ai juste constaté que dans mon cas, la qualité etait meilleur avec la methode c2i.fr maintenant a vu de juger
:)

signaler à un administrateur
Commentaire de fabrice69 le 04/09/2003 19:30:47 administrateur CS

Je sais que la qualité est limitée avec GetThumbnailImage mais dans mon cas, je voulais des miniature de 100 px de large.
Donc la qualité moyenne me suffit largerment, d plus je veux surtout un poids plus léger pour les fichiers.
D'ou l'utilisation de cette technique qui est vraiment plus simple.

Il est quand meme intéressant pour ceux qui ont la qualité qui prime de voir le code de C2I.

F___

signaler à un administrateur
Commentaire de dedzep le 15/04/2004 14:32:17

desolé mais une question de reactivité
est-ce bien resonable pour un site de ecommerce par exemple.
j'explique. un client peu me demander tous les accessoires pour une voiture donnée.
Actuellement je gere les images ET les vignettes.
avec ta proposition n'ai-je pas un risque de fort ralentissement si j'ai par exemple 100 "vignettes" a générer à la volée ?

signaler à un administrateur
Commentaire de jesusonline le 15/04/2004 18:50:28 administrateur CS

Non ce ne sera pas une surcharge, car tu genereras les vignettes qu'une seule fois, ensuite les miniatures sont sauvegardé :

bmp.Save(MonRepertoirePhysique & MonFichierMiniature, System.Drawing.Imaging.ImageFormat.Jpeg)

tu n'aura donc qu'a aller chercher ta miniature sans rien regenerer

signaler à un administrateur
Commentaire de golumest le 30/04/2004 13:54:12

hello,
un ptit pb avc le code: qd je l'execute j'ai:"Name 'CallBackAbort' is not declared."

j'ai chercher sur le net des explications sur le type de variable 'callback abort" pr la version asp de "GetThumbnailImage" mais rien trouver...


any help pliz?

merci!

signaler à un administrateur
Commentaire de fabrice69 le 30/04/2004 16:54:07 administrateur CS

Remplace cette partie par null, ca suffit :

bmp = bmp.GetThumbnailImage(LargeurMiniature, HauteurMiniature, null , IntPtr.Zero)

F___

signaler à un administrateur
Commentaire de fabrice69 le 04/05/2004 20:02:00 administrateur CS

Pour ceux qui cherchaient une réduction de la taille en conservant la qualité, voila une autre solution :
- http://www.aspfr.com/code.aspx?ID=22522

F___

signaler à un administrateur
Commentaire de jl75 le 23/08/2004 14:38:20

salut
j'ai remplacé 'callback abort" par "null" comme susdit
mais rebelotte: "null" is not declared."
(dot net: quel calvaire !)
j'ai essayé plein d'autres trucs  expliqué sur msdn mais rien ne marche
qui peut me dire ce qui ne va pas?
Merci

signaler à un administrateur
Commentaire de titanserver le 27/09/2004 15:40:36

Bonjour,
J'ai également un soucis avec 'CallBackAbort' il me demande de le déclarer mais comment ?

Merci

signaler à un administrateur
Commentaire de jl75 le 27/09/2004 17:36:59

Salut,
J'ai mis le temps mais j'ai trouvé un tour de passe-passe pour contourner le problème (c'est pas tres propre mais ça marche!)

' ajouter la fonction tour de passe-passe:
Function ThumbnailCallback() As Boolean
        Return False
End Function
'declaration du call back
MonCallBackDeCalvaire = New _
          System.Drawing.Image.GetThumbnailImageAbort(AddressOf ThumbnailCallback)
' et remplacer "AddressOf CallBackAbort" par "MonCallBackDeCalvaire" dans le code original comme ci-dessous:

bmp = bmp.GetThumbnailImage(LargeurMiniature, HauteurMiniature, MonCallBackDeCalvaire, IntPtr.Zero)

Et le tour est joué !

Bon courage
Jean-Luc

signaler à un administrateur
Commentaire de titanserver le 28/09/2004 00:43:04

Merci Jean Luc pour ton astuce sa fonction nikel maintenant, encore merci ;-)

signaler à un administrateur
Commentaire de BaFM le 10/12/2004 21:47:47

Salut,
pour regler le problème par le pointeur null, ce serais pas plutôt le mot clé Nothing à utiliser dans VB.NET ?

bmp = bmp.GetThumbnailImage(LargeurMiniature, HauteurMiniature, Nothing, IntPtr.Zero)
MG

signaler à un administrateur
Commentaire de inessa le 28/02/2007 12:23:37

Bonjour
En fait j'ai essayé cet exemple et je suis encore débutante dans vb.net
mais rien ne ce passe à l'execution

voilà le code
*****
Dim MonRepertoirePhysique As String = "I:\Cuisines\"

    Dim MonFichierImage As String = "a.jpg"

    Dim MonFichierMiniature As String = "a2.jpg"

    Dim LargeurMiniature As Integer = 100 'On fixe la hauteur de l'image

    Dim HauteurMiniature As Integer = 0 'la Hauteur sera calculée
    Dim bmp As New System.Drawing.Bitmap(MonRepertoirePhysique & MonFichierImage)

    Dim MonCallBackDeCalvaire = New System.Drawing.Image.GetThumbnailImageAbort(AddressOf ThumbnailCallback)
    Function ThumbnailCallback() As Boolean
        Return False
    End Function


    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load



    

        HauteurMiniature = (bmp.Size.Height * LargeurMiniature / bmp.Size.Width)
        bmp = bmp.GetThumbnailImage(LargeurMiniature, HauteurMiniature, MonCallBackDeCalvaire, IntPtr.Zero)
        bmp.Save(MonRepertoirePhysique & MonFichierMiniature, System.Drawing.Imaging.ImageFormat.Jpeg)
        bmp.Dispose()


    End Sub
*****
Merci d'avance

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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,296 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é.