Wie erstelle ich ein Wasserzeichen

    • VB.NET

    Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von mikeb69.

      Wie erstelle ich ein Wasserzeichen

      Hallo,

      wie erstelle ich ein Wasserzeichen ?
      Dieser Frage habe ich mich heute gewidmet.

      Ein Wasserzeichen ist ein Text oder ein Bild, welches das eigentliche Bild durchscheinen lässt.

      Um ein Wasserzeichen in ein Bild zu bekommen legt man - im Prinzip nur zwei Bitmaps aufeinander.
      Um ein Durchscheinen des eigentlichen Bildes zu bekommen, wird das Wasserzeichen (Text oder Bitmap) halbtransparent gemacht.

      Hier der Code der Klasse:

      VB.NET-Quellcode

      1. 'ClassWatermark ist eine Klasse um Bilder einfach mit einem Wasserzeichen
      2. 'zu markieren.
      3. 'Erstellt von Michael Bernhard alias mikeb69
      4. 'Erstellt am 18.Mai 2008
      5. Public Class ClassWatermark
      6. Private _watermarkfont As Font
      7. Private _watermarktext As String
      8. Private _watermarklocation As Point
      9. Private _watermarkimage As Bitmap
      10. Private _watermarkshadow As Boolean
      11. Private _originalimage As Bitmap
      12. Private _combinedimage As Bitmap
      13. Private Const ALPHA As Byte = 128
      14. ''' <summary>Neue Instanz der Klasse ClassWatermark.</summary>
      15. ''' <param name="image">Bild welches das Wasserzeichen bekommen soll.</param>
      16. ''' <param name="text">Text, welcher als Wasserzeichen erscheinen soll.</param>
      17. ''' <param name="font">Zeichensatz, welcher verwendet werden soll.</param>
      18. ''' <param name="location">Position an der das Wasserzeichen eingebracht werden soll.</param>
      19. ''' <remarks></remarks>
      20. Public Sub New(ByVal image As Bitmap, ByVal text As String, ByVal font As Font, ByVal location As Point)
      21. _watermarktext = text
      22. _watermarkfont = font
      23. _watermarklocation = location
      24. _originalimage = image
      25. End Sub
      26. ''' <summary>Eigentliche Funktion zum Einbringen des Wasserzeichens.</summary>
      27. ''' <remarks>Wurde als Sub ausgeführt. Die Rückgabewerte stehen als Properties zur Verfügung.</remarks>
      28. Public Sub MakeWatermark()
      29. 'bitmap mit dem Wasserzeichen Image füllen
      30. _watermarkimage = New Bitmap(makewatermarkbitmap)
      31. 'Original Bitmap Clonen, damit diese unverändert bleibt.
      32. _combinedimage = _originalimage.Clone
      33. 'jetzt das wasserzeichen in das Original einbringen
      34. Using g As Graphics = Graphics.FromImage(_combinedimage)
      35. g.DrawImage(_watermarkimage, _watermarklocation)
      36. End Using
      37. End Sub
      38. ''' <summary>Diese Funktion erstellt das Wasserzeichen, welches später über das Originalimage
      39. ''' gelegt wird.</summary>
      40. ''' <returns>Image in Textgröße - um Rechenzeit zu sparen.</returns>
      41. ''' <remarks></remarks>
      42. Private Function makewatermarkbitmap() As Image
      43. 'Textgröße ermitteln.
      44. Dim s As Size = TextRenderer.MeasureText(_watermarktext, _watermarkfont)
      45. 'neue Bitmap erstellen
      46. Dim b As New Bitmap(s.Width, s.Height)
      47. 'original Resolution für dieses Bitmap übernehmen
      48. b.SetResolution(_originalimage.HorizontalResolution, _originalimage.VerticalResolution)
      49. Using g As Graphics = Graphics.FromImage(b)
      50. g.Clear(Color.Transparent)
      51. 'schatten zeichnen - wenn gewünscht
      52. If _watermarkshadow = True Then
      53. g.DrawString(_watermarktext, _watermarkfont, New SolidBrush(Color.FromArgb(ALPHA, 0, 0, 0)), 1, 1)
      54. End If
      55. 'echter text
      56. g.DrawString(_watermarktext, _watermarkfont, New SolidBrush(Color.FromArgb(ALPHA, 255, 255, 255)), 0, 0)
      57. 'text halbtransparent machen
      58. For y As Integer = 0 To b.Height - 1
      59. For x As Integer = 0 To b.Width - 1
      60. Dim c As Color = b.GetPixel(x, y)
      61. If c.R <> 0 Or c.G <> 0 Or c.B <> 0 Then
      62. b.SetPixel(x, y, Color.FromArgb(ALPHA, c.R, c.G, c.B))
      63. End If
      64. Next x
      65. Next y
      66. End Using
      67. Return b
      68. End Function
      69. ''' <summary>SaveImage speichert das angegebene Bild (Bitmap).</summary>
      70. ''' <param name="filename">Dateiname mit Pfad, unter welchem die Bitmap gespeichert werden soll.</param>
      71. ''' <returns>True wenn speichern erfolgreich - sonst False.</returns>
      72. ''' <remarks></remarks>
      73. Public Function SaveImage(ByVal filename As String) As Boolean
      74. Try
      75. _combinedimage.Save(filename)
      76. Return True
      77. Catch ex As Exception
      78. Return False
      79. End Try
      80. End Function
      81. #Region "Properties"
      82. ''' <summary>Gibt das Wasserzeichen als Image zurück - oder übernimmt dieses.</summary>
      83. ''' <remarks></remarks>
      84. Public Property WatermarkImage() As Image
      85. Get
      86. Return _watermarkimage
      87. End Get
      88. Set(ByVal value As Image)
      89. _watermarkimage = value
      90. End Set
      91. End Property
      92. ''' <summary>Gibt das Originalbild als Image zurück - oder übernimmt dieses.</summary>
      93. ''' <remarks></remarks>
      94. Public Property OriginalImage() As Image
      95. Get
      96. Return _originalimage
      97. End Get
      98. Set(ByVal value As Image)
      99. _originalimage = value
      100. End Set
      101. End Property
      102. ''' <summary>Gibt das fertige Bild als Image zurück.</summary>
      103. ''' <remarks></remarks>
      104. Public ReadOnly Property CombinedImage() As Image
      105. Get
      106. Return _combinedimage
      107. End Get
      108. End Property
      109. ''' <summary>Gibt den Wasserzeichentext zurück - oder setzt diesen.</summary>
      110. ''' <remarks></remarks>
      111. Public Property WatermarkText() As String
      112. Get
      113. Return _watermarktext
      114. End Get
      115. Set(ByVal value As String)
      116. _watermarktext = value
      117. End Set
      118. End Property
      119. ''' <summary>Gibt den Wasserzeichenfont zurück - oder setzt diesen.</summary>
      120. ''' <remarks></remarks>
      121. Public Property WatermarkFont() As Font
      122. Get
      123. Return _watermarkfont
      124. End Get
      125. Set(ByVal value As Font)
      126. _watermarkfont = value
      127. End Set
      128. End Property
      129. ''' <summary>Gibt zurück, ob das Wasserzeichen einen Schatten haben soll - oder setzt dies.</summary>
      130. ''' <remarks></remarks>
      131. Public Property WatermarkShadow() As Boolean
      132. Get
      133. Return _watermarkshadow
      134. End Get
      135. Set(ByVal value As Boolean)
      136. _watermarkshadow = value
      137. End Set
      138. End Property
      139. #End Region
      140. End Class

      Fragen und Kommentare zu Code sind erwünscht.

      Ich werde, heute noch, eine kleine Beispielanwendung zu dieser Klasse auf meiner HP veröffentlichen.

      EDIT:

      Hab inzwischen eine Dll daraus gemacht.
      (Ok OK OK - hab das auch ein kleinewenig erweitert !)

      Guckst du !

      Gruss

      mikeb69

      Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „mikeb69“ () aus folgendem Grund: Neuer Downloadlink Verweis zur Dll im Showroom

      da das jetzt mal nach oben gekommen ist hab ichs mir gleich mal angeguckt und dabei ist mir aufgefallen, dass du eine ColorMatrix - für den Teil, indem du das ganze Bild durchläufst - verwenden könntest, was auf jeden Fall mal etwas schneller wäre ;)
      Ich wollte auch mal ne total überflüssige Signatur:
      ---Leer---