begin process at 2012 05 28 13:57:55
  Trouver un code source :
 
dans
 
Accueil > Forum > 

ASP.NET

 > 

Web 2.0

 > 

Upload d'image, redimension et enregistrement SQL


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Upload d'image, redimension et enregistrement SQL

samedi 10 février 2007 à 16:32:38 | Upload d'image, redimension et enregistrement SQL

Blowdesign

Membre Club
J'ai un fichier image téléchargé par un upload.

L'objet est un stream.

Je voudrais redimensionner l'image avant de l'enregistrer dans SQL

Mais le stream n'est pas changé car je n'arrive pas à transformer mon bitmap (nécessaire pour changer la taille de l'image) en stream. C'est la fonction RedimensionneImage qui pose problème

Voici le code :

'On passe la hauteur max, la largeur max, et le fichier type System.IO.Stream (System.IO.HttpStream)
clsImage.VerifieTailleImage(clsConstantes.i_MAXHEIGHT_IMG_CULTURE, clsConstantes.i_MAXWIDTH_IMG_CULTURE, e.UploadedFile.InputStream)

    Shared Sub VerifieTailleImage(ByVal iMaxHeigth As Integer, _
                                  ByVal iMaxWidth As Integer, _
                                  ByRef ObjImg As Object)

        Dim iCoefficient As Double = 0
        Dim iCoefficientHeight As Double = 0
        Dim iCoefficientWidth As Double = 0
        Dim iNewHeight As Integer = 0
        Dim iNewWidth As Integer = 0
        Dim iHeightImg As Integer = 0
        Dim iWidthImg As Integer = 0
        Dim imgClientSize As Size = New System.Drawing.Size(0, 0)

        imgClientSize = CalculeTailleImage(ObjImg)

        iHeightImg = imgClientSize.Height
        iWidthImg = imgClientSize.Width

        If Not imgClientSize.IsEmpty AndAlso (iHeightImg > iMaxHeigth Or iWidthImg > iMaxWidth) Then
            iCoefficientHeight = iMaxHeigth / iHeightImg
            iCoefficientWidth = iMaxWidth / iWidthImg

            If iCoefficientHeight <= iCoefficientWidth Then
                iCoefficient = iCoefficientHeight
            Else
                iCoefficient = iCoefficientWidth
            End If

            iNewHeight = CInt(iHeightImg * iCoefficient)
            iNewWidth = CInt(iWidthImg * iCoefficient)

            ObjImg = RedimensionneImage(iNewHeight, iNewWidth, ObjImg)

        End If

    End Sub

    Shared Function CalculeTailleImage(ByVal ObjImg As Object) As Size

        Dim b As System.Drawing.Bitmap = Nothing
        Dim imgClientSize As Size = New System.Drawing.Size(0, 0)

        Select Case ObjImg.GetType().Name
            Case GetType(Image).Name
                b = New System.Drawing.Bitmap(CType(ObjImg, Image))
                imgClientSize = New System.Drawing.Size(b.Size.Width, b.Size.Height)
            Case GetType(ImageButton).Name
                imgClientSize = New System.Drawing.Size(CType(ObjImg, ImageButton).Height.Value, CType(ObjImg, ImageButton).Width.Value)
            Case Else
                If ObjImg.GetType.Name.Contains(GetType(System.IO.Stream).Name) Then
                    b = New System.Drawing.Bitmap(CType(ObjImg, System.IO.Stream))
                    imgClientSize = New System.Drawing.Size(b.Size.Width, b.Size.Height)
                End If
        End Select

        Return imgClientSize

    End Function

    Shared Function RedimensionneImage(ByVal iNewHeight As Integer, _
                                       ByVal iNewWidth As Integer, _
                                       ByRef ObjImg As Object) As Object

        Select Case ObjImg.GetType().Name
            Case GetType(Image).Name
                Dim b As System.Drawing.Bitmap = New System.Drawing.Bitmap(CType(ObjImg, Image))
                Dim Newb As System.Drawing.Bitmap = New System.Drawing.Bitmap(iNewWidth, iNewHeight, b.PixelFormat)
                b = Newb
                Dim objNewImage As Image = CType(ObjImg, Image)
                objNewImage = New System.Drawing.Bitmap(b)
                ObjImg = objNewImage
            Case GetType(ImageButton).Name
                CType(ObjImg, ImageButton).Height = System.Web.UI.WebControls.Unit.Parse(iNewHeight)
                CType(ObjImg, ImageButton).Width = System.Web.UI.WebControls.Unit.Parse(iNewWidth)
            Case Else
                If ObjImg.GetType.Name.Contains(GetType(System.IO.Stream).Name) Then
                    Dim s As System.IO.Stream = CType(ObjImg, System.IO.Stream)
                    Dim b As System.Drawing.Bitmap = New System.Drawing.Bitmap(s)
                    Dim Newb As System.Drawing.Bitmap = New System.Drawing.Bitmap(iNewWidth, iNewHeight, b.PixelFormat)
                    b = Newb
                    ObjImg = b

                End If
        End Select

        Return ObjImg

    End Function

Quelqu'un peut-il m'aider ?

Merci d'avance

Blowdesign
dimanche 11 février 2007 à 01:31:36 | Re : Upload d'image, redimension et enregistrement SQL

nhervagault

Administrateur CodeS-SourceS
Salut,

Regardes juste le post précedent et tu auras les infos que tu cherches ;-)


dimanche 11 février 2007 à 12:41:02 | Re : Upload d'image, redimension et enregistrement SQL

Blowdesign

Membre Club
Merci, mais je ne vois pas en quoi ce post peut m'aider : http://www.aspfr.com/infomsg_1ER-TEST-AVEC-EXTENSION-AJAX_885732.aspx#2

Blowdesign
dimanche 11 février 2007 à 14:27:43 | Re : Upload d'image, redimension et enregistrement SQL

Nurgle

Membre Club Administrateur CodeS-SourceS
Je pense qu'il parlait de ce post là :
http://www.aspfr.com/infomsg_REDUIRE-PHOTO-IMAGE-UPLOAD_886335.aspx#3



Nurgle (Antoine) - MSP
dimanche 11 février 2007 à 14:28:13 | Re : Upload d'image, redimension et enregistrement SQL

nhervagault

Administrateur CodeS-SourceS
Salut,
Le psost précédent sur le site aspfr.com est
http://www.aspfr.com/infomsg_REDUIRE-PHOTO-IMAGE-UPLOAD_886335.aspx#3
Dans la liste des messages sur la droite?

Voila
mardi 13 février 2007 à 10:15:32 | Re : Upload d'image, redimension et enregistrement SQL

Blowdesign

Membre Club
Ok, voilà pour ceux que ça intéresse (en VB.Net)

/* L'appel de la méthode */
*********************

                'Vérifie les dimensions de l'image et la redimensione si besoin
                Dim image As System.Drawing.Image = Nothing
                Dim NewBmp As Bitmap = Nothing
                Dim Stream As System.IO.MemoryStream = New System.IO.MemoryStream

                Try
                    image = System.Drawing.Image.FromStream(leStreamAUtiliser)
                    NewBmp = clsImage.VerifieTailleImage(clsConstantes.i_MAXHEIGHT_IMG_CULTURE, _
                                                                                  clsConstantes.i_MAXWIDTH_IMG_CULTURE, _
                                                                                  image)

                    NewBmp.Save(Stream, image.RawFormat)
                    c = Stream.Length
                    ReDim objTampon(c)
                    objTampon = Stream.GetBuffer()

                    e.InputParameters("img") = objTampon
                Catch ex As Exception
                    Throw New ApplicationException(ex.Message, ex.InnerException)
                Finally
                    If image IsNot Nothing Then
                        image.Dispose()
                    End If

                    If NewBmp IsNot Nothing Then
                        NewBmp.Dispose()
                    End If

                    If Stream IsNot Nothing Then
                        Stream.Close()
                    End If
                End Try

***************

/* La classe Image */
****************

Public Class clsImage

    ''' <summary>
    ''' Calcule les dimensions d'une image
    ''' </summary>
    ''' <param name="ObjImg">Objet image pour lequel on recherche les dimensions</param>
    ''' <returns>Retourne un Size contenant les dimensions de l'image</returns>
    ''' <remarks></remarks>
    Shared Function CalculeTailleImage(ByVal ObjImg As Image) As Size

        Dim b As System.Drawing.Bitmap = Nothing
        Dim imgClientSize As Size = New System.Drawing.Size(0, 0)

        b = New System.Drawing.Bitmap(ObjImg)
        imgClientSize = New System.Drawing.Size(b.Size.Width, b.Size.Height)

        Return imgClientSize

    End Function

    ''' <summary>
    ''' Redimmensionne une image
    ''' </summary>
    ''' <param name="iNewHeight">Entier définissant la nouvelle hauteur de l'image</param>
    ''' <param name="iNewWidth">Entier définissant la nouvelle largeur de l'image</param>
    ''' <param name="ObjImg">Objet image qui sera redimmensionné</param>
    ''' <returns>Retounre un Bitmap de la nouvelle image</returns>
    ''' <remarks>Le Bitmap est utile au cas où l'on veut enregistrer l'image dans un flux (Stream)
    ''' afin d'enregistrer l'image dans une Base de Donnée par exemple</remarks>
    Shared Function RedimensionneImage(ByVal iNewHeight As Integer, _
                                       ByVal iNewWidth As Integer, _
                                       ByVal ObjImg As Image) As Bitmap

        Dim b As System.Drawing.Bitmap = New System.Drawing.Bitmap(ObjImg)
        Dim Newb As System.Drawing.Bitmap = New System.Drawing.Bitmap(ObjImg, iNewWidth, iNewHeight)

        Return Newb

    End Function

    ''' <summary>
    ''' Vérifie la taille d'une image et la redimensionne si besoin
    ''' </summary>
    ''' <param name="iMaxHeigth">Entier définissant la hauteur maximale autorisée</param>
    ''' <param name="iMaxWidth">Entier définissant la largeur maximale autorisée</param>
    ''' <param name="ObjImg">Objet image à vérifier</param>
    ''' <returns>Retounre un Bitmap de la nouvelle image</returns>
    ''' <remarks>Le Bitmap est utile au cas où l'on veut enregistrer l'image dans un flux (Stream)
    ''' afin d'enregistrer l'image dans une Base de Donnée par exemple. Cette fonction utilise les Fonctions CalculeTailleImage et RedimensionneImage</remarks>
    Shared Function VerifieTailleImage(ByVal iMaxHeigth As Integer, _
                                       ByVal iMaxWidth As Integer, _
                                       ByVal ObjImg As Image) As Bitmap

        Dim iCoefficient As Double = 0
        Dim iCoefficientHeight As Double = 0
        Dim iCoefficientWidth As Double = 0
        Dim iNewHeight As Integer = 0
        Dim iNewWidth As Integer = 0
        Dim iHeightImg As Integer = 0
        Dim iWidthImg As Integer = 0
        Dim imgClientSize As Size = New System.Drawing.Size(0, 0)
        Dim ObjRetun As Object = Nothing

        imgClientSize = CalculeTailleImage(ObjImg)

        iHeightImg = imgClientSize.Height
        iWidthImg = imgClientSize.Width

        If Not imgClientSize.IsEmpty AndAlso (iHeightImg > iMaxHeigth Or iWidthImg > iMaxWidth) Then
            iCoefficientHeight = iMaxHeigth / iHeightImg
            iCoefficientWidth = iMaxWidth / iWidthImg

            If iCoefficientHeight <= iCoefficientWidth Then
                iCoefficient = iCoefficientHeight
            Else
                iCoefficient = iCoefficientWidth
            End If

            iNewHeight = CInt(iHeightImg * iCoefficient)
            iNewWidth = CInt(iWidthImg * iCoefficient)

        Else
            iNewHeight = iHeightImg
            iNewWidth = iWidthImg
        End If

        ObjRetun = RedimensionneImage(iNewHeight, iNewWidth, ObjImg)

        Return ObjRetun

    End Function

End Class

****************

Blowdesign


Cette discussion est classée dans : system, size, bitmap, drawing, objimg


Répondre à ce message

Sujets en rapport avec ce message

Images dynamiques [ par LostWorld ] Bonjour,J'ai débuté l'asp.NET il y a qqs mois, j'ai toujours essayé de persévérer et de résoudre mes problèmes de code par moi-même mais cette fois-ci Probleme avec System.Drawing.Bitmap [ par jolazoule ] Salut,J'utilise System.Drawing.Bitmap pour redimensionner une imageJ'ai le code suivant : Dim bmp As </FO Gestion de miniatures d'images [ par yous ] Dans le but de proposer des aperçus et pour ne pas retarder les temps de téléchargement, je me suis intéressé à la gestion des miniatures d'images.S'i Traitement d'images avec asp.net [ par amorosalain ] [size=6][b][i]SAM[/i][/b][/size=6]Bonjour à tous.Mon problème est le suivant, je voudrais transformer un peu une image venant d'un upload en ajoutant System.Drawing.Imaging.ImageFormat.Png [ par primactif ] Bonjourj'ai fais un ImageHandler pour créer des miniatures.si l'image d'origine est un .jpg donc pas de transparence je n'ai aucun soucis.mais je veux Miniatures d'images [ par yous ] J'ai récupéré un code grâce à l'un des membres de codesSources, ci-dessous :********************************************************************System utiliser system.drawing ??? [ par romain3395 ] Bonjour,j'aimerai savoir comment on pourrait faire pour dessiner un diagramme.J'ai vu que dans la classe Systeme, il y a un objet drawing.Comment l'ut probleme avec Access?! [ par Jula ] salut a tous, je suis débutante et j'ai besoin d'aide:je voudrais me connecter à une bd faite avec MS Access200, je fais donc ça:< problème avec une bd Access [ par Jula ] salut a tous, je suis débutante et j'ai besoin d'aide:je voudrais me connecter à une bd faite avec MS Access200, je fais donc ça:string monConnexionSt Création d'une ScrollBar Vertical sur un DataGrid [ par Kiwimachine ] Bonjour à TousJe suis nouveau sur le Forum ainsi que dans le développement ASP.NET. Malgré tout, je trouve cette technologie géniale et vraiment compl


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,278 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales