Asp.net - classe de passage d'un fichier xml (base64) vers un fichier image

Soyez le premier à donner votre avis sur cette source.

Snippet vu 14 502 fois - Téléchargée 27 fois

Contenu du snippet

Dans le cadre d'une utilisation de WebService pour des Produits, il est pratique de pouvoir passer d'un fichier Image vers un fichier XML en Base 64 et de pouvoir faire le chemin inverse (pour le décodage).

-------- Précision après le message posté -----------
La base de travail pour cet classe est un article trouvé sur perfectXML que j'ai transformé en VB.NET et adapté sous forme de classe :
- http://www.perfectxml.com/Answers.asp?ID=2
----------------------------------------------------------

Source / Exemple :


Imports System.Drawing
Imports System.IO
Imports System.Text
Imports System.Xml
Imports System.Xml.Serialization

Public Class FileToXML

 ' -----------------------------------------------------
 Public Shared Function FileToXML(ByVal CheminFichier As String) As String
 ' Serialization: image to XML (base64)

  Dim srcImage As Image = New Bitmap(CheminFichier)
  Dim memStream As MemoryStream = New MemoryStream()
  Dim strBuilder As StringBuilder = New StringBuilder()
  srcImage.Save(memStream, System.Drawing.Imaging.ImageFormat.Gif)
  Dim writerSerialized As StringWriter = New StringWriter(strBuilder)

  Dim writerXMLText As XmlTextWriter = New XmlTextWriter(writerSerialized)
  Dim serializerXML As XmlSerializer = New XmlSerializer(memStream.GetBuffer.GetType)
  serializerXML.Serialize(writerXMLText, memStream.GetBuffer())
  writerXMLText.Close()

  Return strBuilder.ToString()

 End Function

 ' -----------------------------------------------------
 Public Shared Function XMLToFile(ByVal StreamXMLImage As String) As Image
 ' Deserialization: XML (base64) to image
  Dim readerText As XmlTextReader = New XmlTextReader(New StringReader(StreamXMLImage))
  Dim MonStream As MemoryStream = New MemoryStream()
  Dim serializerXML As New XmlSerializer(MonStream.GetBuffer().GetType())
  Dim Buffer() As Byte = serializerXML.Deserialize(readerText)

  Dim ResultImage As Image = New Bitmap(New MemoryStream(Buffer))
  readerText.Close()

  Return ResultImage
 End Function
 ' -----------------------------------------------------

End Class

Conclusion :


Bon coding.

Romelard Fabrice (Alias F___)

A voir également

Ajouter un commentaire

Commentaires

DarkRomu
Messages postés
5
Date d'inscription
jeudi 20 février 2003
Statut
Membre
Dernière intervention
4 mai 2004
-
Alors effectivement le source est intéressant mais j'ai vu exactement le même code à cette adresse http://www.perfectxml.com/Answers.asp?ID=2
Sauf que c'est une version C# (!?) mais comme les commentaires sont exactement les mêmes, je me dis que cela doit être juste une traduction. Donc si c'est la cas ce serait bien de donner l'origine du code (mais je viens peut-être de la faire) part respect pour l'auteur.
Et d'ailleurs pourquoi le traduire le source en VB ? Je n'ai rien contre VB.Net mais quitte à repomper du code autant respecter le source d'origine. Evidemment, si tu as besoin de la réecrire en VB.Net pour tes besoins personels, soit, mais alors pourquoi ne pas donner aussi le source d'origine en C# ?
cs_fabrice69
Messages postés
1766
Date d'inscription
jeudi 12 octobre 2000
Statut
Modérateur
Dernière intervention
11 décembre 2013
4 -
Exact, j'ai pris la version de Perfect XML que j'ai retraduit en VB.NET :
- http://www.perfectxml.com/Answers.asp?ID=2

C'est la raison pour laquelle j'ai laissé tous les commentaires d'origine et pas cherché à maquiller le code fourni.

En revanche, tes commentaires personnels sur le lien manquant et tes jugements de valeurs sont inutiles dans ce message, si tu connaissais mes autres sources ou articles, tu saurais que ce n'est pas du tout mon style mais juste un oubli lors du post.

F___
cs_fabrice69
Messages postés
1766
Date d'inscription
jeudi 12 octobre 2000
Statut
Modérateur
Dernière intervention
11 décembre 2013
4 -
PS: si tu avais regardé dans l'exemple de PerfectXML, tu aurais vu que ce n'est pas du tout géré en classe mais directement dans une WinForm. Il n'y a pas de gestion des appels extérieurs. Ce n'est donc pas du simple 'pompage' comme tu l'insinues.

F___
DarkRomu
Messages postés
5
Date d'inscription
jeudi 20 février 2003
Statut
Membre
Dernière intervention
4 mai 2004
-
Je ne vois pas pourquoi tu le prends aussi mal. Je n'ai rien insinué du tout car j'ai été très clair dans mes propos et suffisamment explicite pour te dire que c'est :
1) une traduction de code
2) que tu as oublié de citer tes sources
3) que c'est un pompage de code (cela t'a apparemment paru péjoratif mais vu le peu de modification, on peut considérer que c'est un pompage, mais là je ne vois rien de dramatique en soit, il ne faut pas le prendre mal).
Je ne crois pas avoir été incorrect, ou insultant. Je n'ai pas non plus dramatisé en disant que c'était "un grave oubli", "une faute énorme", "une façon malhonnété de faire". Je t'ai laissé une chance de t'expliquer ce que tu as fait. Tu as confirmé et rectifié ton oubli, c'était plutôt ça le but de mon commentaire et tu bien répondu. Maintenant si tu te sens visé à ce point là, je comprends pas vraiment?
Je voulais aussi savoir aussi pourquoi tu ne fournissais pas le code en C# (ce qui était ma dernière question) vu que le code d'origine est écrit dans ce langage, que ça ne coûte pas plus cher (voire moins cher) de la faire, et que beaucoup d'entre nous le pratique.
cs_fabrice69
Messages postés
1766
Date d'inscription
jeudi 12 octobre 2000
Statut
Modérateur
Dernière intervention
11 décembre 2013
4 -
OK, soit, j'étais énervé (stress actuel dans mon boulot).

Petite explication de texte :
- Le fichier est une classe autonome que j'ai traduite d'une source C# qui elle était une simple procédure d'une Winform.
- Elle est traduite en VB.NET, car tout le projet dans lequel elle a été intégrée est en VB.NET et non en C#.
- Le terme 'pompage' est a mon sens péjoratif, j'ai laissé tout ce qui est issu du C# tel quel parce que je n'avais pas de raison de le masquer. Par contre ce n'est pas du tout du pompage, la version de base n'est pas du tout gérée comme telle et surtout pas intégrable directement comme c'est le cas maintenant.

F___

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.