GRAVATAR Image als Bitmap herunterladen

    • VB.NET

    Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

      GRAVATAR Image als Bitmap herunterladen

      Ich habe mir heute eine kleine Funktion zurechtgeklöppelt mit der ich durch die Übergabe einer Email-Adresse das Bild von GRAVATAR als Bitmap übergeben bekomme:

      VB.NET-Quellcode

      1. Imports System.IO
      2. Imports System.IO.Ports
      3. Imports System.Security.Cryptography
      4. Imports System.Text
      5. Imports System.Net
      6. '(bin nicht ganz sicher ob alle Imports erforderlich sind)
      7. PictureBox_Gravatar.Image = Nothing
      8. PictureBox_Gravatar.Image = GravatarBitmap(textbox_EmailAdresse.Text)
      9. ''' <summary>
      10. ''' Erzeugt den MD5Hash
      11. ''' </summary>
      12. ''' <param name="strString"></param>
      13. ''' <returns></returns>
      14. Public Function MD5StringHash(ByVal strString As String) As String
      15. Dim MD5 As New MD5CryptoServiceProvider
      16. Dim Data As Byte()
      17. Dim Result As Byte()
      18. Dim Res As String = ""
      19. Dim Tmp As String = ""
      20. Data = Encoding.ASCII.GetBytes(strString)
      21. Result = MD5.ComputeHash(Data)
      22. For i As Integer = 0 To Result.Length - 1
      23. Tmp = Hex(Result(i))
      24. If Len(Tmp) = 1 Then Tmp = "0" & Tmp
      25. Res += Tmp
      26. Next
      27. Return Res
      28. End Function
      29. ''' <summary>
      30. ''' Übergibt das Gravatar-Image zu einer Email-Adresse.
      31. ''' Größe 80x80 Pixel
      32. ''' </summary>
      33. ''' <param name="Email"></param>
      34. ''' <returns></returns>
      35. Public Function GravatarBitmap(ByVal Email As String) As Bitmap
      36. Dim hash As String = MD5StringHash(Email.ToLower).ToLower
      37. Dim URL As String = "https://www.gravatar.com/avatar/" + hash + ".jpg"
      38. Dim wc As New WebClient()
      39. Dim binData As Byte() = wc.DownloadData(URL)
      40. Dim stream As New MemoryStream(binData)
      41. Dim Bitmap As New Bitmap(stream)
      42. Return Bitmap
      43. End Function
      Liebe Grüße
      Roland Berghöfer

      Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at
      Moin,

      ich habe verschiedene Verbesserungsvorschläge:
      1. Die *CryptoServiceProvider-Klassen soll man nicht mehr verwenden. Stattdessen soll man die Create-Methode auf der Basisklasse aufrufen. Quelle
      2. Die Hex-Darstellung baust du dir mühsam selbst. Das Framework bietet dafür BitConverter.ToString an.
      3. MD5 und der WebClient werden nicht disposed. Der MemoryStream zwar auch nicht, aber der muss auch nicht. Quelle
      Im Folgenden habe ich den Code etwas angepasst und auch gleich nach C# übersetzt, falls jemand das gebrauchen kann …

      VB.NET-Quellcode

      1. Imports System.Drawing
      2. Imports System.IO
      3. Imports System.Net
      4. Imports System.Security.Cryptography
      5. Imports System.Text
      6. Public Class Gravatar
      7. ''' <summary>
      8. ''' Erzeugt den MD5Hash
      9. ''' </summary>
      10. ''' <param name="str"></param>
      11. ''' <returns></returns>
      12. Private Shared Function MD5StringHash(ByVal str As String) As String
      13. Using md5 As MD5 = MD5.Create()
      14. Dim strBytes = Encoding.UTF8.GetBytes(str)
      15. Dim hashBytes = md5.ComputeHash(strBytes)
      16. Return BitConverter.ToString(hashBytes).Replace("-", string.Empty)
      17. End Using
      18. End Function
      19. ''' <summary>
      20. ''' Übergibt das Gravatar-Image zu einer Email-Adresse.
      21. ''' Größe 80x80 Pixel
      22. ''' </summary>
      23. ''' <param name="email"></param>
      24. ''' <returns></returns>
      25. Public Shared Function GravatarBitmap(ByVal email As String) As Bitmap
      26. Dim hash As String = MD5StringHash(email.ToLowerInvariant()).ToLowerInvariant()
      27. Dim url As String = string.Format("https://www.gravatar.com/avatar/{0}.jpg", hash)
      28. ' Falls Async wünschenswert ist, bietet sich HttpClient statt WebClient an
      29. Using wc As New WebClient()
      30. Dim binData As Byte() = wc.DownloadData(url)
      31. Dim stream As New MemoryStream(binData)
      32. Return New Bitmap(stream)
      33. End Using
      34. End Function
      35. End Class

      C#-Quellcode

      1. using System.Drawing;
      2. using System.Net;
      3. using System.Security.Cryptography;
      4. using System.Text;
      5. public static class Gravatar
      6. {
      7. private static string MD5StringHash(string str)
      8. {
      9. using var md5 = MD5.Create();
      10. var strBytes = Encoding.UTF8.GetBytes(str);
      11. var hashBytes = md5.ComputeHash(strBytes);
      12. return BitConverter.ToString(hashBytes).Replace("-", string.Empty);
      13. }
      14. public static Bitmap GravatarBitmap(string email)
      15. {
      16. var hash = MD5StringHash(email.ToLowerInvariant()).ToLowerInvariant();
      17. var url = $"https://www.gravatar.com/avatar/{hash}.jpg";
      18. // Falls Async wünschenswert ist, bietet sich HttpClient statt WebClient an
      19. using var wc = new WebClient();
      20. var bitmapData = wc.DownloadData(url);
      21. var stream = new MemoryStream(bitmapData);
      22. return new Bitmap(stream);
      23. }
      24. }



      Weiteres Verbesserungspotenzial: Abhängig davon, wie häufig man Aufrufe durchführt, kann es sich lohnen, den WebClient in einer Instanzvariable zu cachen und wiederzuverwenden.
      Mit freundlichen Grüßen,
      Thunderbolt
      @dive26 WebClient und MemoryStream immer sowie PictureBox_Gravatar.Image bei Neuzuweisung disposen.
      Was hat es mit diesem Image auf sich?
      Es als Bild an Deinen Post anzuhängen wäre doch einfacher, da es offensichtlich für viele (um nicht alle zu sagen) EMail-Adressen gleich ist.
      Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
      Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
      Ein guter .NET-Snippetkonverter (der ist verfügbar).
      Programmierfragen über PN / Konversation werden ignoriert!
      @RodFromGermany
      ​Was hat es mit diesem Image auf sich?


      Man muss natürlich mit seine Email-Adresse bei Gravatar ein Konto haben.
      Probiere es mal mit info@bonit.at, dann siehst Du meinen Avatar ;-).
      In fast jeder Wordpress-Kommentarfunktion wird das verwendet.
      Liebe Grüße
      Roland Berghöfer

      Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at